1.JSON 格式

JSON格式是用于数据交换的文本格式,

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

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

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

2.原始类型的值只有四种:字符串,数值(必须以十进制表示),布尔值和null(不能使用NaN, Infinity, -Infinityundefined)。

3.字符串必须是双引号表示不能是单引号。

4.对象的键名必须放在双引号内。

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

以下都是合法的 JSON。



["one", "two", "three"]

{ "one": 1, "two": 2, "three": 3 }

{"names": ["张三", "李四"] }

[ { "name": "张三"}, {"name": "李四"} ]复制代码



2.JSON 对象

JSON对象是 JavaScript 的原生对象,用来处理 JSON 格式数据。它有两个静态方法:JSON.stringify()JSON.parse()

3.JSON.stringify()

3.1基本用法

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

JSON.stringify('abc') // ""abc""
JSON.stringify([]) // "[]"JSON.stringify({}) // "{}"

JSON.stringify([1, "false", false])
// '[1,"false",false]'

JSON.stringify({ name: "张三" })
// '{"name":"张三"}'复制代码

上面代码将各种类型的值,转成 JSON 字符串。

注意,对于原始类型的字符串,转换结果会带双引号。

JSON.stringify('foo') === ""foo"" // true复制代码

如果对象的属性是undefined、函数或 XML 对象,该属性会被JSON.stringify过滤。

var obj = {
  a: undefined,
  b: function () {}
};

JSON.stringify(obj) // "{}"复制代码

上面代码中,对象obja属性是undefined,而b属性是一个函数,结果都被JSON.stringify过滤。

如果数组的成员是undefined、函数或 XML 对象,则这些值被转成null

var arr = [undefined, function () {}];
JSON.stringify(arr) // "[null,null]"复制代码

上面代码中,数组arr的成员是undefined和函数,它们都被转成了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}"复制代码

上面代码中,barobj对象的不可遍历属性,JSON.stringify方法会忽略这个属性。

4.JSON.parse()

JSON.parse方法用于将 JSON 字符串转换成对应的值。

如果传入的字符串不是有效的 JSON 格式,JSON.parse方法将报错。

JSON.parse("'String'") // illegal single quotes
// SyntaxError: Unexpected token ILLEGAL复制代码