在JavaScript中处理JSON:面向初学者的解析与序列化

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

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

开始课程

JSON与JavaScript简介

\n

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,已成为Web应用中客户端与服务器之间交互的标准。由于其简单性和可读性,JSON被广泛应用于从配置文件到API请求的各个领域。在本文中,我们将探讨如何在Node.js环境中处理JSON,掌握解析(将字符串转换为对象)和序列化(将对象转换为字符串)。本教程面向已掌握JavaScript基础的初学者开发者。

\n\n

什么是JSON以及为什么需要它?

\n

JSON是一种基于JavaScript对象语法的文本格式。然而,JSON只是一个字符串,可以通过网络传输或存储在文件中。JSON中的主要数据类型包括:

\n
    \n
  • 字符串(使用双引号)
  • \n
  • 数字(整数和浮点数)
  • \n
  • 布尔值(true/false)
  • \n
  • null
  • \n
  • 数组
  • \n
  • 对象(键使用双引号)
  • \n
\n

一个有效的JSON字符串示例:

\n
{\n  "name": "安娜",\n  "age": 28,\n  "isStudent": false,\n  "skills": ["JavaScript", "Node.js"],\n  "address": null\n}
\n

与普通的JavaScript对象不同,JSON要求严格的语法:所有键和字符串值都必须用双引号括起来,并且不允许使用注释。

\n\n

解析JSON:JSON.parse()

\n

要将JSON字符串转换为JavaScript对象,需要使用JSON.parse()方法。当您从服务器接收数据、读取文件或处理用户输入时,这是必要的。

\n\n

基本解析示例

\n
const jsonString = '{"name": "伊万", "age": 30}';\nconst user = JSON.parse(jsonString);\nconsole.log(user.name); // 伊万\nconsole.log(user.age);  // 30
\n\n

解析数组

\n
const jsonArray = '[1, 2, "三", true]';\nconst arr = JSON.parse(jsonArray);\nconsole.log(arr[2]); // 三
\n\n

解析错误处理

\n

无效的JSON会引发SyntaxError异常。在处理不可信数据时,始终使用try...catch:

\n
try {\n  const invalid = '{"name": "错误}';\n  const result = JSON.parse(invalid);\n} catch (error) {\n  console.error('解析错误:', error.message);\n}
\n

还可以传递第二个参数——一个reviver函数,它允许在解析过程中转换值:

\n
const json = '{"date": "2024-01-15", "count": "42"}';\nconst obj = JSON.parse(json, (key, value) => {\n  if (key === 'date') return new Date(value);\n  if (key === 'count') return Number(value);\n  return value;\n});\nconsole.log(obj.date.getFullYear()); // 2024\nconsole.log(typeof obj.count);       // number
\n\n

序列化JSON:JSON.stringify()

\n

反向过程——将JavaScript对象转换为JSON字符串——通过JSON.stringify()完成。这用于向服务器发送数据、保存到文件或进行日志记录。

\n\n

简单序列化示例

\n
const user = {\n  name: '玛丽亚',\n  age: 25,\n  isAdmin: true\n};\nconst json = JSON.stringify(user);\nconsole.log(json);\n// {"name":"玛丽亚","age":25,"isAdmin":true}
\n\n

格式化输出

\n

该方法接受三个参数:值、替换函数(或字段数组)以及用于缩进的空格数:

\n
const data = {\n  id: 1,\n  title: '文章',\n  tags: ['js', 'json']\n};\n// 使用2个空格缩进\nconst prettyJson = JSON.stringify(data, null, 2);\nconsole.log(prettyJson);\n/* 输出:\n{\n  "id": 1,\n  "title": "文章",\n  "tags": [\n    "js",\n    "json"\n  ]\n}\n*/
\n\n

字段过滤

\n

第二个参数可以是一个键数组,用于指定要包含在结果中的字段:

\n
const user = {\n  name: '彼得',\n  password: 'secret12                

博客

书籍推荐