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

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

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

开始课程

JSON 处理在 Node.js:完整指南



JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,基于 JavaScript 对象语法。在 Node.js 环境中,处理 JSON 是一项日常任务:从配置文件到 API 请求。本文将详细解析 JSON 处理的所有方面,包括解析、序列化、验证以及处理大文件。



基本方法:JSON.parse() 和 JSON.stringify()



处理 JSON 的两个主要方法直接内置于 JavaScript 中。它们是全局可用的,无需安装额外的库。



JSON.parse() — 将字符串转换为对象



JSON.parse() 方法接受一个 JSON 字符串并返回相应的 JavaScript 对象。如果字符串包含无效的 JSON,将抛出 SyntaxError 异常。



const jsonString = '{"name": "安娜", "age": 28, "isStudent": false}';const user = JSON.parse(jsonString);console.log(user.name); // "安娜"console.log(user.age);  // 28


第二个可选参数可以传递一个 reviver 函数,它允许在解析过程中修改值:



const json = '{"year": "2024", "price": "1500.50"}';const data = JSON.parse(json, (key, value) => {  if (key === 'price') return parseFloat(value);  if (key === 'year') return parseInt(value);  return value;});console.log(typeof data.price); // "number"


JSON.stringify() — 将对象转换为字符串



JSON.stringify() 方法执行相反操作:将对象或值转换为 JSON 字符串。它最多接受三个参数:值、替换函数或键数组,以及用于格式化的空格数量。



const user = {  name: "伊万",  age: 32,  skills: ["JS", "Node", "Python"]};

// 无格式化console.log(JSON.stringify(user));// {"name":"伊万","age":32,"skills":["JS","Node","Python"]}

// 带格式化(2个空格)console.log(JSON.stringify(user, null, 2));/*{ "name": "伊万", "age": 32, "skills": [ "JS", "Node", "Python" ]}*/


第二个参数可以是用于过滤的键数组:



console.log(JSON.stringify(user, ['name', 'age']));// {"name":"伊万","age":32}


在 Node.js 中处理 JSON 文件



在 Node.js 中,经常需要读取和写入 JSON 文件。为此使用 fs(文件系统)模块。



读取 JSON 文件



const fs = require('fs');

// 同步读取try { const data = fs.readFileSync('config.json', 'utf8'); const config = JSON.parse(data); console.log(config.port);} catch (err) { console.error('读取文件错误:', err.message);}

// 异步读取fs.readFile('config.json', 'utf8', (err, data) => { if (err) { console.error('错误:', err); return; } const config = JSON.parse(data); console.log(config.port);});


写入 JSON 文件



const fs = require('fs');

const settings = { theme: 'dark', language: 'ru', fontSize: 14};

// 同步写入fs.writeFileSync('settings.json', JSON.stringify(settings, null, 2));

// 异步写入fs.writeFile('settings.json', JSON.stringify(settings, null, 2), (err) => { if (err) console.error('写入错误:', err); else console.log('文件已保存');});


JSON 验证



在使用数据之前,始终应该检查其有效性。最简单的方法是将 JSON.parse() 包装在 try-catch 中。对于更复杂的结构验证,可以使用库。



使用 try-catch 检查



function safeJsonParse(str) {  try {    return { data: JSON.parse(str), error: null };  } catch (e) {    return { data: null, error: e.message };  }}

推荐