原生JSON对象包含有两个关键方法.JSON.parse()方法用来解析JSON字符串,并且重构为JavaScript对象,而JSON.stringify()方法可以将javascript对象转换为等价的JSON字符串.
方法:
JSON.parse(text[, reviver])
把字符串解析成为JSON,选择性的把值转换成JSON。
参数:
- text,要被解析成js的字符串
- reviver,如果是一个函数,则规定了原始值如何被解析改造,在被返回之前。
返回值:
- Object对应给定的JSON文本。
使用 JSON.parse()
- JSON.parse(‘{}’); // {}
- JSON.parse(‘true’); // true
- JSON.parse(‘“foo”’); // “foo”
- JSON.parse(‘[1, 5, “false”]’); // [1, 5, “false”]
- JSON.parse(‘null’); // null
JSON.parse() 不允许用逗号作为结尾
JSON.stringify(value[, replacer [, space]])
JSON.stringify() 方法将JavaScript值转换为JSON字符串,如果指定了replacer函数,则可以替换值,或者如果指定了replacer数组,则可选地仅包括指定的属性。
参数:
- value,将要序列化成 JSON 字符串的值。
- replacer(可选)
- 如果该参数是一个函数,则在序列化过程中,被序列化的值的每个属性都会经过该函数的转换和处理;
- 如果该参数是一个数组,则只有包含在这个数组中的属性名才会被序列化到最终的 JSON 字符串中;
- 如果该参数为null或者未提供,则对象所有的属性都会被序列化;
- space(可选),指定缩进用的空白字符串,用于美化输出(pretty-print),
- 如果参数是个数字,它代表有多少的空格;上限为10。改值若小于1,则意味着没有空格;
- 如果该参数为字符串(字符串的前十个字母),该字符串将被作为空格;
- 如果该参数没有提供(或者为null)将没有空格。
返回值:
- 一个表示给定值的JSON字符串。
描述
关于序列化,有下面五点注意事项:
- 非数组对象的属性不能保证以特定的顺序出现在序列化后的字符串中。
- 布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
- undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。
- 所有以 symbol 为属性键的属性都会被完全忽略掉,即便 replacer 参数中强制指定包含了它们。
- 不可枚举的属性会被忽略
JSON.stringify({}); // '{}'
JSON.stringify(true); // 'true'
JSON.stringify("foo"); // '"foo"'
JSON.stringify([1, "false", false]); // '[1,"false",false]'
JSON.stringify({ x: 5 }); // '{"x":5}'
JSON.stringify({x: 5, y: 6});
// "{"x":5,"y":6}"
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify([undefined, Object, Symbol("")]);
// '[null,null,null]'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
JSON.stringify(
{[Symbol.for("foo")]: "foo"},
function (k, v) {
if (typeof k === "symbol"){
return "a symbol";
}
}
);
// undefined
// 不可枚举的属性默认会被忽略:
JSON.stringify(
Object.create(
null,
{
x: { value: 'x', enumerable: false },
y: { value: 'y', enumerable: true }
}
)
);
// "{"y":"y"}"