Node.js 中的 JSON:数据处理完整指南
JSON(JavaScript 对象表示法)是一种轻量级的数据交换格式,已成为 Web API、配置文件以及结构化信息存储的事实标准。在 Node.js 环境中,JSON 处理几乎是任何应用程序不可或缺的一部分。本文将详细探讨 JSON 处理的各个方面:从基础解析到高级流处理。
1. 基础:解析与序列化
在 Node.js 中,处理 JSON 使用两个全局方法:JSON.parse() 和 JSON.stringify()。它们无需加载额外模块即可使用。
JSON.parse() — 将字符串转换为对象
JSON.parse() 方法接受一个 JSON 字符串并返回相应的 JavaScript 对象。重要的是,该字符串必须是严格有效的 JSON。
const jsonString = '{"name": "Alice", "age": 30, "isAdmin": false}';const user = JSON.parse(jsonString);console.log(user.name); // Aliceconsole.log(typeof user); // object该方法还支持第二个参数——一个“reviver”函数,它允许在解析过程中转换值:
const data = '{"date": "2025-01-15T10:00:00Z"}';const parsed = JSON.parse(data, (key, value) => { if (key === 'date') return new Date(value); return value;});console.log(parsed.date instanceof Date); // trueJSON.stringify() — 将对象转换为字符串
JSON.stringify() 方法执行反向转换——将 JavaScript 对象转换为 JSON 字符串。
const user = {
name: 'Bob',
age: 25,
hobbies: ['coding', 'reading']
};
const json = JSON.stringify(user);
console.log(json);
// {"name":"Bob","age":25,"hobbies":["coding","reading"]}
该方法接受三个参数:值、替换函数(replacer)以及用于格式化的空格数(space):
const obj = { a: 1, b: 2, c: 3 };
// 带缩进的格式化输出
console.log(JSON.stringify(obj, null, 2));
// {
// "a": 1,
// "b": 2,
// "c": 3
// }
// 使用 replacer 过滤键
const filtered = JSON.stringify(obj, ['a', 'c'], 2);
console.log(filtered);
// {
// "a": 1,
// "c": 3
// }
2. 读取和写入 JSON 文件
在实际应用中,JSON 数据通常存储在文件中。使用内置的 fs 模块进行文件系统操作。
同步读取和写入
const fs = require('fs');
const path = require('path');
const filePath = path.join(__dirname, 'config.json');
// 读取
const rawData = fs.readFileSync(filePath, 'utf-8');
const config = JSON.parse(rawData);
console.log(config.port);
// 写入
const newConfig = { port: 3000, host: 'localhost' };
fs.writeFileSync(filePath, JSON.stringify(newConfig, null, 2));
异步读取和写入(推荐方式)
const fs = require('fs').promises;
async function readConfig() {
try {
const data = await fs.readFile('config.json', 'utf-8');
return JSON.parse(data);
} catch (err) {
console.error('读取文件错误:', err);
throw err;
}
}
async function writeConfig(config) {
await fs.writeFile('config.json', JSON.stringify(config, null, 2));
}
// 使用
(async () => {
const config = await readConfig();
config.port = 4000;
await writeConfig(config);
})();
3. JSON 验证
有时需要检查一个字符串是否为有效的 JSON,而不引发异常。最可靠的方法是将 JSON.parse() 包裹在 try-catch 中:
图书馆中也有
推荐