引言:什么是JSON,为什么在JavaScript中需要它?
JSON(JavaScript对象表示法)是一种轻量级的文本数据交换格式,基于JavaScript对象语法。尽管名称如此,JSON是语言无关的,几乎所有现代编程语言都支持它。在Node.js生态系统和浏览器端JavaScript中,处理JSON是最常见的操作之一:从通过API获取数据,到保存配置以及服务器与客户端之间的信息传输。
在本文中,我们将详细讲解两个关键方法:JSON.parse()(将JSON字符串转换为JavaScript对象)和JSON.stringify()(将JavaScript对象转换为JSON字符串)。您将学会如何正确处理错误、处理嵌套结构以及使用这些方法的高级功能。
1. 解析JSON:JSON.parse()方法
JSON.parse()方法接收一个JSON格式的字符串,并将其转换为JavaScript对象、数组或原始值。当您从外部来源(例如REST API或文件)获取数据时,这是最基本的操作。
基本语法
const jsonString = '{"name": "安娜", "age": 30, "isStudent": false}';const user = JSON.parse(jsonString);
console.log(user.name); // "安娜"console.log(user.age); // 30console.log(user.isStudent); // false请注意:JSON中的键和字符串值必须用双引号括起来。使用单引号或键不带引号会导致错误。
解析数组
JSON不仅可以包含对象,还可以包含数组:
const jsonArray = '[1, 2, 3, "四", true]';const arr = JSON.parse(jsonArray);
console.log(arr[0]); // 1console.log(arr[3]); // "四"嵌套结构
JSON支持无限嵌套:
const complexJson = '{"users":[{"id":1,"name":"伊万"},{"id":2,"name":"玛丽亚"}]}';const data = JSON.parse(complexJson);
console.log(data.users[0].name); // "伊万"console.log(data.users[1].id); // 2解析错误处理
如果字符串包含无效的JSON,JSON.parse()会抛出SyntaxError异常。处理外部数据时,始终使用try/catch:
const invalidJson = '{"name": "彼得", age: 25}'; // 错误:age没有引号
try { const obj = JSON.parse(invalidJson); console.log(obj);} catch (error) { console.error('JSON解析错误:', error.message); // 输出:JSON解析错误:Unexpected token 'a', ...}高级用法:reviver函数
JSON.parse()的第二个参数是一个reviver函数,它允许在解析过程中转换值。例如,可以自动将日期字符串转换为Date对象:
const jsonWithDate = '{"name": "事件", "date": "2025-03-15T10:00:00.000Z"}';
const event = JSON.parse(jsonWithDate, (key, value) => { if (key === 'date') { return new Date(value); } return value;});
console.log(event.date instanceof Date); // trueconsole.log(event.date.getFullYear()); // 20252. 序列化JSON:JSON.stringify()方法
JSON.stringify()方法执行相反的操作——将JavaScript对象或值转换为JSON字符串。这对于向服务器发送数据、保存到文件或日志记录是必需的。
基本语法
const user = { name: "奥尔加", age: 28, isAdmin: true, skills: ["JS", "Python", "SQL"]};
const jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"奥尔