JavaScript 中的 JSON 解析与序列化
在 JavaScript 中,处理 JSON 数据是非常常见的操作,主要涉及两个核心方法:
1. JSON 解析(Parse)
JSON.parse() 方法用于将 JSON 字符串转换为 JavaScript 对象。
基本用法
javascriptconst jsonString = '{"name": "John", "age": 30, "city": "New York"}'; const obj = JSON.parse(jsonString); console.log(obj.name); // 输出: John
高级用法:使用 reviver 函数
JSON.parse() 可以接受第二个参数作为 reviver 函数,用于在解析过程中转换结果:
javascriptconst jsonString = '{"name": "John", "birthDate": "2000-01-01"}'; const obj = JSON.parse(jsonString, (key, value) => { if (key === 'birthDate') { return new Date(value); } return value; }); console.log(obj.birthDate instanceof Date); // 输出: true
2. JSON 序列化(Stringify)
JSON.stringify() 方法用于将 JavaScript 对象转换为 JSON 字符串。
基本用法
javascriptconst obj = {name: "John", age: 30, city: "New York"}; const jsonString = JSON.stringify(obj); console.log(jsonString); // 输出: {"name":"John","age":30,"city":"New York"}
高级用法
2.1 使用 replacer 参数
可以指定要包含的属性,或者对值进行转换:
javascriptconst obj = {name: "John", age: 30, city: "New York", salary: 50000}; // 只包含指定属性 const jsonString1 = JSON.stringify(obj, ['name', 'age']); // 使用函数转换值 const jsonString2 = JSON.stringify(obj, (key, value) => { if (key === 'salary') { return value > 0 ? ' confidential ' : value; } return value; });
2.2 使用 space 参数
用于添加缩进和空白,使输出更易读:
javascriptconst obj = {name: "John", age: 30, city: "New York"}; const jsonString = JSON.stringify(obj, null, 2); // 输出格式化的 JSON 字符串,缩进 2 个空格
注意事项
- 循环引用:如果对象中存在循环引用,
JSON.stringify()会抛出错误。 - undefined 和函数:这些值在序列化时会被忽略(对象中)或转换为 null(数组中)。
- Date 对象:会被转换为 ISO 格式的字符串。
- 正则表达式:会被转换为空对象
{}。 - Symbol:作为对象键时会被忽略,作为值时会被转换为 undefined。