标准库之JSON对象

  1. JSON格式

    每个JSON对象就是一个值,可能是一个数组或对象,也可能是一个原始类型的值,只能是一个值,不能是两个或更多的值.

    JSON 对值的类型和格式有严格的规定

    1. 复合类型的值只能是数组或者对象,不能是函数/正则表达式对象/日期对象.

    2. 原始类型的值只有四种: 字符串/数值(十进制)/布尔值和null,

      不能使用Nan , Infinity, -Infinity , undefined

    3. 字符串必须使用双引号表示,不能使用单引号.

    4. 对象的键名必须放在双引号里面.

    5. 数组或对象最后一个成员的后面 , 不能加逗号.

    以下是合法JSON

    ["one","two","three"]
    {"one":1,"two":2,"three":3}
    {"names":["张三","李四"]
    

    以下都是不合法的 JSON。

    { name: "张三", 'age': 32 }  // 属性名必须使用双引号
    
    [32, 64, 128, 0xFFF] // 不能使用十六进制值
    
    { "name": "张三", "age": undefined } // 不能使用 undefined
    
    { "name": "张三",
      "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
      "getName": function () {
          return this.name;
      }
    } // 属性值不能使用函数和日期对
    
  2. JSON对象

    是JS的原生对象,用来处理JSON格式数据.它有两个静态方法:

    JSON.stringify( ) and JSON.parse( );

    JSON.stringify( )

    该方法用于将一个值转换为符合JSON格式字符串,此字符串可以被JSON.parse 方法还原.

    • 注意,对于原始类型字符串,转换结果会带双引号.
    JSON.stringify('foo') // "\"foo\""
    
    • 如果对象的属性是 undefined 函数或者XML对象,该属性会被JSON.stringify 过滤.
    var obj = {
      a:undefined,
      b:function(){}
    }
    JSON.stringify(obj) // "{}"
    
    • 如果数组的成员是 undefined 函数或 XML对象 ,则这些值会被转成null.

      var arr = [undefined,function(){}];
      JSON.stringify(arr) //"[null,null]"
      
    • 正则对象会被转换成空对象

      JSON.stringify(/foo/) //"{}"
      
    • JSON.stringify 方法会忽略对象的不可遍历属性

      var obj = {};
      Object.defineProperties(obj,{
        'foo':{
          value:1,
          enumerable:true
        },
        'bar':{
          value:2,
          enumerable:false
        }
      });
      
      JSON.stringify(obj); // "{"foo":1}"
      
    • JSON.stringify方法还可以接受一个数组,作为第二个参数,指定需要转成字符串的属性。

      var obj = {
        'prop1': 'value1',
        'prop2': 'value2',
        'prop3': 'value3'
      };
      
      var selectedProperties = ['prop1', 'prop2'];
      
      JSON.stringify(obj, selectedProperties)
      // "{"prop1":"value1","prop2":"value2"}"
      

      上面代码中,JSON.stringify方法的第二个参数指定,只转prop1prop2两个属性。

      但是此规则只适用于对象的属性

    • 第二个参数还可以是一个函数,用来更改JSON.stringify的返回值。

      function f(key, value) {
        if (typeof value === "number") {
          value = 2 * value;
        }
        return value;
      }
      
      JSON.stringify({ a: 1, b: 2 }, f)
      // '{"a": 2,"b": 4}'
      
      
    • 第三个参数

      JSON.stringify还可以接受第三个参数,用于增加返回的 JSON 字符串的可读性。如果是数字,表示每个属性前面添加的空格数目(最多不超过10个);如果是字符串(不超过10个字符),则该字符串会添加在每行前面。

      JSON.stringify({ p1: 1, p2: 2 }, null, 2);
      /*
      "{
        "p1": 1,
        "p2": 2
      }"
      */
      
      JSON.stringify({ p1:1, p2:2 }, null, '|-');
      /*
      "{
      |-"p1": 1,
      |-"p2": 2
      }"
      */
      
      
    • 参数对象的 toJSON 方法

      如果参数对象有自定义的toJSON方法,那么JSON.stringify会使用这个方法的返回值作为参数,而忽略原对象的其他属性。

      下面是一个普通的对象。

      var user = {
        firstName: '三',
        lastName: '张',
      
        get fullName(){
          return this.lastName + this.firstName;
        }
      };
      
      JSON.stringify(user)
      // "{"firstName":"三","lastName":"张","fullName":"张三"}"
      

      现在,为这个对象加上toJSON方法。

      var user = {
        firstName: '三',
        lastName: '张',
      
        get fullName(){
          return this.lastName + this.firstName;
        },
      
        toJSON: function () {
          return {
            name: this.lastName + this.firstName
          };
        }
      };
      
      JSON.stringify(user)
      // "{"name":"张三"}"
      
    JSON.parse( )

    如果传的字符串不是有效的JSON格式, 该方法会报错.

    为了处理解析错误,可以将JSON.parse方法放在try...catch代码块中。

    try {
      JSON.parse("'String'");
    } catch(e) {
      console.log('parsing error');
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值