https://mp.weixin.qq.com/s/5B_oxmnx9W9TLp9qBiv6sg

API

JSON 是一种基于文本的轻量级的数据交换格式。它可以被**任何的编程语言读**取和作为数据格式来传递

JSON 可以表示数字布尔值字符串null数组(值的有序序列),以及由这些值(或数组、对象)所组成的对象(字符串与的映射)。

JSON 使用 JavaScript 语法,但是 JSON 格式仅仅是一个文本。文本可以被任何编程语言读取及作为数据格式传递。

JSON.stringfy

  1. var a = { name: "lisi" };
  2. console.log(JSON.stringify(a))
  3. // {"name":"lisi"}
  4. console.log(JSON.stringify(a,null,4))
  5. //{
  6. // "name": "lisi"
  7. //}
  • 注意可以使用第二个参数和第三个参数格式化输出结果
  • 如果存在循环引用的现象,会报错。
  • 慎用JSON.stringify

注意事项

转换属性值中有 toJSON 方法,慎用

转换值中如果有 toJSON 方法,该方法返回的值将会是最后的序列化结果

  1. // toJSON
  2. let toJsonMyIntro = {
  3. name: "Gopal",
  4. age: 25,
  5. like: "FE",
  6. toJSON: function () {
  7. return "前端杂货铺";
  8. },
  9. };
  10. console.log(JSON.stringify(toJsonMyIntro)); // "前端杂货铺"

被转换值中有 undefined、任意的函数以及 symbol 值,慎用

  1. JSON.stringify([undefined, Object, Symbol("")]);
  2. // '[null,null,null]'
  3. JSON.stringify({ x: undefined, y: Object, z: Symbol("") });
  4. // '{}'

包含循环引用的对象,慎用

会报以下错误:

  1. Uncaught TypeError: Converting circular structure to JSON
  2. --> starting at object with constructor 'Object'
  3. | property 'age' -> object with constructor 'Object'
  4. --- property 'name' closes the circle
  5. at JSON.stringify (<anonymous>)
  6. at <anonymous>:1:6

以 symbol 为属性键的属性,慎用

所有以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。

值为 NaN 和 Infinity,慎用

数组的值,或者非数组对象属性值为 NaN 和 Infinity 的,会被转换成 null

具有不可枚举的属性值时,慎用

不可枚举的属性默认会被忽略:

JSON.parse