JavaScript中的JSON操作:实战解析与序列化
JSON(JavaScript对象表示法)是一种轻量级数据交换格式,广泛应用于现代Web应用程序中。在JavaScript中,JSON操作内置于语言层面,使其成为客户端与服务器之间数据交换以及配置存储的理想工具。本文将深入解析如何在Node.js环境中解析和序列化JSON,并提供实战示例与最佳实践。
什么是JSON及其用途?
JSON是一种基于JavaScript对象语法的文本格式。它支持以下数据类型:
- 字符串(双引号包裹)
- 数字(整数和浮点数)
- 布尔值(true/false)
- 数组
- 对象
- null
JSON无处不在:从API请求到配置文件(例如package.json)。在Node.js中,JSON是微服务之间数据交换的主要格式。
解析JSON:将字符串转换为对象
要将JSON字符串转换为JavaScript对象,使用JSON.parse()方法。来看一个基本示例:
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字符串必须严格格式化。所有键和字符串值必须使用双引号。单引号或尾随逗号会引发错误。
解析时的错误处理
处理外部数据(来自文件、API)时,始终存在收到无效JSON的风险。请使用try...catch:
const fs = require('fs');
try { const data = fs.readFileSync('data.json', 'utf8'); const parsed = JSON.parse(data); console.log('解析成功:', parsed);} catch (error) { if (error instanceof SyntaxError) { console.error('JSON语法错误:', error.message); } else { console.error('文件读取错误:', error.message); }}使用reviver函数进行解析
JSON.parse()方法接受第二个参数——一个可以转换值的函数。这对于将字符串日期转换为Date对象非常有用:
const json = '{"name": "伊万", "birthDate": "1990-05-15T00:00:00Z"}';const user = JSON.parse(json, (key, value) => { if (key === 'birthDate') { return new Date(value); } return value;});
console.log(user.birthDate instanceof Date); // trueconsole.log(user.birthDate.getFullYear()); // 1990序列化JSON:将对象转换为字符串
反向过程——将JavaScript对象转换为JSON字符串——通过JSON.stringify()完成。
const user = { name: '玛丽亚', age: 25, skills: ['JavaScript', 'Node.js', 'Python'], isActive: true};
const jsonString = JSON.stringify(user);console.log(jsonString);// {"name":"玛丽亚","age":25,"skills":["JavaScript","Node.js","Python"],"isActive":true}格式化输出
为增强可读性,可以添加缩进:
const prettyJson = JSON.stringify(user, null, 2);console.log(prettyJson);/*{ "name": "玛丽亚", "age": 25, "skills": [ "JavaScript", "Node.js", "Python" ], "isActive": true}*/过滤与替换值
JSON.stringify()的第二个参数可以是键数组(用于过滤)或替换函数:
博客
书籍推荐
推荐阅读