JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于 JavaScript 的一个子集,但作为一种独立于语言的文本格式,被广泛用于系统间的数据传输和存储。
1. 基本语法与结构
JSON 的语法非常简单,主要由两种结构组成:
- 对象(Object):用花括号
{}
包围,表示一个无序的“键/值”对集合。键(key)必须是字符串(用双引号包围),值(value)可以是 JSON 支持的任意类型。
{
"name": "Alice",
"age": 25,
"isStudent": false
}
- 数组(Array):用方括号
[]
包围,表示一个有序的值列表。数组中的值可以是任意 JSON 类型。
["apple", "banana", "orange"]
2. JSON 支持的数据类型
JSON 只支持以下几种基本类型:
类型 | 说明 | 示例 |
---|---|---|
字符串 (String) | 必须用双引号 " 包围 | "hello" , "123" |
数字 (Number) | 整数或浮点数 | 42 , 3.14 , -10 |
布尔值 (Boolean) | true 或 false | true , false |
null | 表示空值 | null |
对象 (Object) | 键值对集合 | {"key": "value"} |
数组 (Array) | 有序值列表 | [1, 2, 3] |
重要限制:
- 不支持:
undefined
、function
、Symbol
、Date
对象、RegExp
对象。- 键必须是字符串,且必须用双引号。
- 不允许尾随逗号(trailing comma)。
- 不支持注释。
3. JSON 与 JavaScript 对象的区别
虽然 JSON 看起来很像 JavaScript 对象,但它们是不同的概念:
特性 | JSON | JavaScript 对象 |
---|---|---|
本质 | 字符串(文本格式) | 对象(内存中的数据结构) |
用途 | 数据传输和存储 | 程序内部数据操作 |
键 | 必须加双引号 "key" | 可加可不加(key 或 "key" ) |
值类型 | 仅限 JSON 支持的类型 | 支持所有 JS 类型(包括 undefined , function ) |
方法 | 不能包含方法 | 可以包含方法 |
尾随逗号 | 不允许 | 允许(某些环境) |
示例对比:
// JavaScript 对象(可以包含函数和未加引号的键)
const jsObj = {
name: 'Bob',
sayHello: function() { console.log('Hi!'); },
isActive: true
};
// JSON 字符串(必须是纯数据,无函数)
const jsonString = '{"name": "Bob", "isActive": true}';
4. JSON 在 JavaScript 中的使用
JavaScript 提供了内置的 JSON
对象来处理 JSON 数据:
JSON.stringify()
:将 JavaScript 对象或值转换为 JSON 字符串。
const obj = { name: "Charlie", age: 30 };
const jsonString = JSON.stringify(obj);
console.log(jsonString); // '{"name":"Charlie","age":30}'
JSON.parse()
:将 JSON 字符串解析为 JavaScript 对象或值。
const jsonString = '{"name":"Charlie","age":30}';
const obj = JSON.parse(jsonString);
console.log(obj.name); // "Charlie"
注意:
JSON.parse()
只能解析有效的 JSON 字符串。如果字符串包含undefined
、函数或单引号,会抛出SyntaxError
。
5. JSON 的优势
- 轻量级:语法简洁,数据体积小,传输效率高。
- 易读易写:人类可读,结构清晰。
- 语言无关:虽然源于 JS,但几乎所有编程语言都支持 JSON 的解析和生成。
- 广泛支持:是 Web API(如 RESTful API)最常用的数据格式。
- 与 JS 天然集成:在 JavaScript 中解析和生成极其方便。
6. JSON 的应用场景
- API 数据交换:前后端通过 HTTP 请求传输数据(如 REST API)。
- 配置文件:如
package.json
,tsconfig.json
。 - 浏览器存储:
localStorage
和sessionStorage
只能存储字符串,通常用JSON.stringify()
存储对象。 - NoSQL 数据库:如 MongoDB 使用 BSON(Binary JSON)存储数据。
总结
JSON 是一种基于文本的、轻量级的、独立于语言的数据格式,用于在系统间交换结构化数据。它语法简单,只支持有限的数据类型,其核心是字符串形式的对象和数组。在 JavaScript 中,通过 JSON.stringify()
和 JSON.parse()
可以方便地在对象和 JSON 字符串之间转换。理解 JSON 是现代 Web 开发的基础。
THE END