深入理解 JSON 格式与 JSON 对象
一、JSON 的本质与存在形式
JSON,本质是 JS 对象字面量的子集。
它可以以两种形式存在:
- 对象形式:用于解读 JSON 中的数据
- 字符串形式:用于通过网络传输 JSON 数据
由此衍生出两个关键概念:
- 反序列化(deserialization) :将字符串转换为原生对象
- 序列化(serialization) :将原生对象转换为可网络传输的字符串
二、JSON 格式的核心规则
(一)JSON 数组与数据特性
- JSON 是一种纯数据格式,它只包含属性,没有方法。
- 甚至一个错位的逗号或分号就可以导致 JSON 文件出错。你应该小心检查你想使用的数据(计算机生成的 JSON 很少出错,只要生成程序正常工作)。可通过 JSONLint 验证 JSON。
- JSON 可以是任何有效数据类型的形式,比如单个字符串或数字就是有效的 JSON 对象。
- 与 JavaScript 代码中对象属性可不加引号不同,JSON 中只有带引号的字符串可作为属性。
- JSON 要求在字符串和属性名称周围使用双引号,单引号无效。
三、JSON 对象
JavaScript 中内置了 JSON 对象,它提供了用于处理 JSON 数据的方法。JSON 作为一种语法,可用于序列化对象、数组、数值、字符串、boolean、null。
(一)静态方法
-
JSON.parse ()(反序列化) :解析 JSON 字符串并返回对应的值,可额外传入转换函数,在返回前修改生成的值和其属性。示例:
javascript
运行
const json = '{"result":true, "count":42}'; const obj = JSON.parse(json); console.log(obj.count); // 期望输出:42 console.log(obj.result); // 期望输出:true -
JSON.stringify ()(序列化) :返回与指定值对应的 JSON 字符串,可通过额外参数控制仅包含某些属性,或自定义替换某些属性值。示例:
javascript
运行
console.log(JSON.stringify({ x: 5, y: 6 })); // Expected output: '{"x":5,"y":6}' console.log( JSON.stringify([new Number(3), new String("false"), new Boolean(false)]), ); // Expected output: '[3,"false",false]' console.log(JSON.stringify({ x: [10, undefined, function () {}, Symbol("")] })); // Expected output: '{"x":[10,null,null,null]}' console.log(JSON.stringify(new Date(2006, 0, 2, 15, 4, 5))); // Expected output: '"2006-01-02T15:04:05.000Z"'