什么是JSON_Javascript如何解析和生成它

JSON是一种轻量级数据交换格式,语法源自JavaScript对象字面量,支持字符串(双引号)、数字、布尔值、null、数组和对象;JS中用JSON.parse()解析、JSON.stringify()序列化,需注意类型限制与安全规范。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,语法简洁、易读易写,且被几乎所有主流编程语言支持。它不是 JavaScript 的专属格式,但它的语法直接源自 JavaScript 的对象字面量,因此在 JS 中解析和生成 JSON 特别自然、高效。

JSON 长什么样?

JSON 由键值对组成,只支持以下数据类型:

  • 字符串(必须用双引号,单引号不合法
  • 数字(整数或浮点数)
  • 布尔值(truefalse
  • null
  • 数组(方括号包裹,逗号分隔)
  • 对象(花括号包裹,键必须是双引号字符串)

例如:

{"name": "张三", "age": 28, "hobbies": ["读书", "游泳"], "isStudent": false}

JavaScript 如何解析 JSON 字符串?

使用 JSON.parse() 将符合规范的 JSON 字符串转为 JS 值(对象或数组):

  • 成功时返回对应 JS 数据结构;失败时抛出 SyntaxError(比如多逗号、单引号、尾随逗号、undefined)
  • 可选第二个参数 reviver 函数,用于在解析过程中过滤或转换值

示例:

const data = JSON.parse('{"score": 95.5, "tags": ["js", "json"]}');
console.log(data.score); // 95.5

JavaScript 如何生成 JSON 字符串?

使用 JSON.stringify() 把 JS 值(对象、数组等)序列化为 JSON 字符串:

  • 只处理可序列化的属性:忽略函数、undefined、Symbol、循环引用会报错
  • 可选第二个参数 replacer(数组或函数),控制哪些属性被包含
  • 可选第三个参数 space(数字或字符串),用于美化缩进(如 2"  "

示例:

const user = { name: "李四", age: 30, city: undefined };
console.log(JSON.stringify(user)); // {"name":"李四","age":30}
// 注意:city 被自动忽略

常见坑与注意事项

JSON 和 JS 对象不完全等价,容易出错的地方包括:

  • JSON 键名必须用双引号;JS 对象可以省略或用单引号(但那不是 JSON)
  • Date 对象、RegExp、Map、Set、函数等无法直接 JSON 序列化,需手动转换(如 date.toISOString()
  • 后端返回的 JSON 响应体需先用 response.json()(fetch)或 JSON.parse(xhr.responseText) 解析
  • 不要用 eval() 或构造函数解析 JSON——极不安全,且已淘汰