• 前端处理JSON数据


    • 转义

      • 用来进行转义
      • 除了本身,要转义的还有引号、ASCII码(如-37这样)什么的。
      • 这种换行在json的字符串字段中要转义成
    • 原生的JSON即可进行json数据的处理

      • JSON.parse()

        • JSON.parse()对转义字的符执行过程其实经历了两次转义:一次是字符串本身的转义,一次是字符串转对象时的转义。
          • 所以如果你想在字符串中放一个,那么转成JSON对象之前的字符串中就要有4个,也就是比正常以为的要多一倍的。
          • 不要以为很复杂,其实就是多了一倍的。
          • 比如想要的原始字符串文本是C: empdatatransfer;正常理解字符串是这个样子:"C: empdatatransfer";但是给JSON.parse()用的话,需要是这个样子:"C:\temp\datatransfer\"。
      • JSON.stringfy()

        • 使用replacer控制序列化输出,比如只输出一部分字段。

          • replacer是一个过滤函数(jsonObject只能是一个json对象,json数组貌似不可以?)或则一个数组(jsonObject是一个json数组也可以。但不知道输出的字段顺序按数组参数顺序,还是json对象中的原始字段顺序?)包含要被stringify的属性名。如果没有定义,默认所有属性都被stringify。
          jsonString = JSON.stringify(jsonObject, function (key, value) {
            if (fields.indexOf(key) > -1) {
              return undefined;
            } else {
              return value;
            }
          });
          
          jsonString = JSON.stringify(jsonObject, fields);
          
        • 会丢失类的成员方法,不像java、c#那样,序列化后只会有成员变量,要自己实现反序列化回指定类,as没用。

        let foo: Foo = Object.assign(new Foo(), JSON.parse(fooJson));
        
        class SerializationHelper {
            static toInstance<T>(obj: T, json: string) : T {
                var jsonObj = JSON.parse(json);
        
                if (typeof obj["fromJSON"] === "function") {
                    obj["fromJSON"](jsonObj);
                }
                else {
                    for (var propName in jsonObj) {
                        obj[propName] = jsonObj[propName]
                    }
                }
        
                return obj;
            }
        }
        
        var json = '{"name": "John Doe"}',
        foo = SerializationHelper.toInstance(new Foo(), json);
        
        class Serializable {
            fillFromJSON(json: string) {
                var jsonObj = JSON.parse(json);
                for (var propName in jsonObj) {
                    this[propName] = jsonObj[propName]
                }
            }
        }
        
        class Foo extends Serializable {
            name: string;
            GetName(): string { return this.name }
        }
        
        var foo = new Foo();
        foo.fillFromJSON(json);
        
    • Angular中

      • 可以直接把JSON文件当做对象/接口来使用,可以直接使用其各个字段名。
        • 如果想要读取非json格式的文件,为了避免异步请求文件再解析的复杂度(因为运行在浏览器客户端中),可以当做json文件的一个字段的字符串值(该转义的要转义),然后再import成json对象使用,比较方便。
      import xxx from 'src/assets/json/xxx.json';
      
      • 也可以用JSON.parse来把字符串转成对象/接口,也可以直接使用其各个字段名(虽然这种方式可能没有输入提示)。
  • 相关阅读:
    Android RxJava 2.0中backpressure(背压)概念的理解
    Android 解决RecyclerView瀑布流效果结合Glide使用时图片变形的问题
    Android 滚动RecyclerView加载图片时的流畅度优化
    Android RecyclerView 滑动时图片加载的优化
    云计算之路-阿里云上:结合IIS日志分析“黑色30秒”问题团队
    云计算之路-阿里云上:对“黑色30秒”问题的猜想团队
    云计算之路-阿里云上:排查“黑色30秒”问题-为什么请求会排队团队
    云计算之路-阿里云上:Web服务器遭遇奇怪的“黑色30秒”问题团队
    上周热点回顾(4.14-4.20)团队
    上周热点回顾(4.7-4.13)团队
  • 原文地址:https://www.cnblogs.com/wyp1988/p/12449387.html
Copyright © 2020-2023  润新知