在JavaScript中处理JSON:面向初学者的解析与序列化

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言:什么是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()); // 2025


2. 序列化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":"奥尔

博客

书籍推荐