JavaScript中解析JSON用JSON.parse(),序列化用JSON.stringify();前者要求字符串严格符合JSON规范(双引号、无尾逗号等),后者三参数中replacer可过滤/转换字段,space用于格式化输出,二者配合可实现安全数据交换与简单深拷贝。
JavaScript中解析JSON用 JSON.parse(),序列化对象用 JSON.stringify();后者有三个参数,但常用的是前两个。
JSON.parse() 用于把符合JSON格式的字符串转成JavaScript值(对象、数组、字符串、数字等)。注意:字符串必须是严格JSON格式——键名和字符串值必须用双引号,不能有末尾逗号,不能有单引号或注释。
JSON.parse('{"name": "张三", "age": 25}')
JSON.parse("{'name': '张三'}")(单引号不合法)JSON.parse('{"name": "张三",}') (尾逗号非法)可选第二个参数是 reviver函数,用于在解析过程中逐层处理每个键值对,比如过滤字段、转换日期字符串:
const data = '{"name":"李四","birth":"2000-01-01"}';
JSON.parse(data, (key, value) => {
if (key === 'birth') return new Date(value);
return value;
}); // { name: "李四", birth: Date object }JSON.stringify(value, replacer, space)
r)' ')常见用法示例:
// 只保留指定字段
JSON.stringify({a: 1, b: 2, c: 3}, ['a', 'c']); // '{"a":1,"c":3}'
// 用函数过滤/修改值
JSON.stringify({x: 1, y: 2}, (k, v) => k === 'y' ? undefined : v * 2); // '{"x":2}'
// 格式化输出
JSON.stringify({a: 1, b: {c: 2}}, null, 2);
// 输出:
// {
// "a": 1,
// "b": {
// "c": 2
// }
// }
JSON.stringify 会忽略:undefined、function、Symbol 类型的属性值,以及循环引用的对象(直接报错)。
JSON.stringify({f() {}, x: undefined, s: Symbol('s')}) → {}
const obj = {}; obj.self = obj; JSON.stringify(obj) → TypeError: Converting circular structure to JSON
遇到循环引用可用第三方库(如 flatted)或手动预处理;需要保留函数可先转为字符串再存,但要注意执行安全。
调试时快速查看结构,加 space=2 更清晰;想深拷贝简单对象,可用 JSON.parse(JSON.stringify(obj))(仅限纯数据,不含函数、Date、RegExp等)。
基本上就这些。用熟 parse 和 stringify 的参数,处理前后端数据交换就顺多了。