如何在 JavaScript 中解析和序列化 JSON 数据?
JavaScript 中的 JSON 解析与序列化在 JavaScript 中,处理 JSON 数据是非常常见的操作,主要涉及两个核心方法:1. JSON 解析(Parse)JSON.parse() 方法用于将 JSON 字符串转换为 JavaScript 对象。基本用法const jsonString = '{"name": "John", "age": 30, "city": "New York"}';const obj = JSON.parse(jsonString);console.log(obj.name); // 输出: John高级用法:使用 reviver 函数JSON.parse() 可以接受第二个参数作为 reviver 函数,用于在解析过程中转换结果:const 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); // 输出: true2. JSON 序列化(Stringify)JSON.stringify() 方法用于将 JavaScript 对象转换为 JSON 字符串。基本用法const 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 参数可以指定要包含的属性,或者对值进行转换:const 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 参数用于添加缩进和空白,使输出更易读:const 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。