JavaScript中的JSON:解析与序列化完全指南

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

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

开始课程

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()的第二个参数可以是键数组(用于过滤)或替换函数:





                
                

博客

书籍推荐