解析JSON
使用一个函数:
const jsonString = '[{"name":"John","score":51},{"name":"Jack","score":17}]';
const data = JSON.parse(jsonString, (key, value) =>
key === 'name' ? value.toUpperCase() : value
);
结果为:
[
{
'name': 'JOHN',
'score': 51
},
{
'name': 'JACK',
'score': 17
}
]
当数据必须以序列化/编码的方式传输,但访问时必须要反序列化/解码时非常有用:
const jsonString = '{"date":"2016-01-04T23:00:00.000Z"}';
const data = JSON.parse(jsonString, (key, value) =>
key === 'date' ? new Date(value) : value
);
要确保每次迭代都返回有用的值,如果返回的是 undefined,这条属性会被删除。
序列化一个值
一个 JavaScript值可以转换成一个JSON字符串,使用JSON.stringify() 函数:
// Boolean
JSON.stringify(true); // 'true'
// Number
JSON.stringify(12); // '12'
// String
JSON.stringify('foo'); // '"foo"'
// Object
JSON.stringify({}); // '{}'
JSON.stringify({foo: 'baz'}); // '{"foo": "baz"}'
// Array
JSON.stringify([1, true, 'foo']); // '[1, true, "foo"]'
// Date
JSON.stringify(new Date()); // '"2016-08-06T17:25:23.588Z"'
// Symbol
JSON.stringify({
x: undefined,
y: Object,
z: Symbol('')
}); // '{}'
为了可读性,可以在第3个参数指定缩进.
JSON.stringify({x: 1, y: 1}, null, 2); // 2 space characters will be used for indentation
结果是:
{
'x': 1,
'y': 1
}
或者一个字符串值也可以用于缩进。
JSON.stringify({x: 1, y: 1}, null, '\t'); // tab character will be used for indentation
结果是:
{
'x': 1,
'y': 1
}