JavaScript (Node.js) 中的 JSON 处理:完整指南

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

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

开始课程

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); // true


JSON.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 中:


                
    
    

推荐