JSON学习总结


JSON本质上就是一个字符串

  // json
  var json = '{"name":"jsong","age":18}';
  // 对象
  var obj = { name: 'jsong', age: 18 };
  • 对象转JSON字符串,结果都是字符串
    JSON.stringify(obj)
  JSON.stringify(11); // "11"
  JSON.stringify('11'); // ""11""
  JSON.stringify(null); // null
  JSON.stringify(true); // "true"
  • JSON 字符串转对象
    JSON.parse(jsonStr)
  JSON.parse(11); // 11
  JSON.parse('11'); // 11
  JSON.parse('"11"'); // "11"
  JSON.parse('null'); // null
  JSON.parse('true'); // true
不安全的JSON值

undefined,function,symbol,循环引用都是不安全的JSON值,在对象中遇到undefined,function,symbol时会自动将其忽略,在数组中返回null

  JSON.stringify(undefined); // undefined
  JSON.stringify(function() {}); // undefined
  JSON.stringify(Symbol(1)); // undefined
  JSON.stringify([1, undefined, function() {}, 2]); // "[1,null,null,2]"
  JSON.stringify({ a: 1, b: function() {} }); // "{"a":1}"
自定义toJSON()

当对象中定义了toJSON()方法, JSON字符串化会先调用该方法。
toJSON()返回一个能够被字符串化的安全JSON值,而不是一个JSON字符串

  var a = { b: 1 };

  a.toJSON = function() {
    return { c: 4 };
  };
  console.log(JSON.stringify(a)); // {"c":4}

当对含有不安全JSON值的对象字符串化时,可以自定义toJSON()

  var o = {},
    obj = {
      a: 1,
      b: o,
      c: function() {}
    };
  o.d = obj;

  JSON.stringify(obj); // 循环引用,报错

  a.toJSON = function() {
    return { obj: this.a };
  };
  console.log(JSON.stringify(obj));
  JSON.stringify(obj); // {"a":1}
  
JSON.stringify()参数
  • 传递replacer,可以是数组或者函数,用处理排除属性。
    如果是数组,必须是字符串数组,包含要处理的属性名,其他的属性会被忽略
  var a = { b: 1, c: '1', d: [1, 2, 3] };
  JSON.stringify(a, ['b', 'c']); // {"b":1,"c":"1"}

如果是函数,对象本身调用一次,然后每个数据各调用一次,传递连个参数,键和值

  JSON.stringify(a, function(k, v) {
  if (k !== 'c') return v;
}); // {"b":1,"d":[1,2,3]}
  • 传递space,指定缩进格式,space为正整数时,指定每一级缩进的字符数,space为字符串时,最前面的十个字符被用于缩进
  var a = { b: 1, c: '1', d: [1, 2, 3] };
 //   {
 //     "b": 1,
 //     "c": "1",
 //     "d": [
 //        1,
 //        2,
 //        3
 //     ]
 //  }
 JSON.stringify(a, null, 3);
 // {
 //   -------"b": 1,
 //   -------"c": "1",
 //   -------"d": [
 //   --------------1,
 //   --------------2,
 //   --------------3
 //   -------]
 //   }
 JSON.stringify(a, null, '-------');
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值