JSON 入门:一种轻量级的数据交换格式

举报
暮山紫 发表于 2026/10/04 15:33:24 2026/10/04
【摘要】 JSON(JavaScript Object Notation,JavaScript 对象表示法)是当今软件开发中最常见的数据交换格式之一。无论是调用 Web API、编写配置文件,还是在前后端之间传递数据,JSON 几乎无处不在。它并不是一种编程语言,也不是数据库,而是一种用于表示和交换结构化数据的文本格式。一、JSON 的由来JSON 由 Douglas Crockford 在 2001...

JSON(JavaScript Object Notation,JavaScript 对象表示法)是当今软件开发中最常见的数据交换格式之一。无论是调用 Web API、编写配置文件,还是在前后端之间传递数据,JSON 几乎无处不在。它并不是一种编程语言,也不是数据库,而是一种用于表示和交换结构化数据的文本格式。

一、JSON 的由来

JSON 由 Douglas Crockford 在 2001 年左右提出。它最初受到 JavaScript 对象字面量语法的启发,但很快被设计成一种与语言无关的通用格式。2006 年,JSON 被发布为 RFC 4627;2013 年,ECMA 发布 ECMA-404 标准;2017 年,IETF 发布 RFC 8259,进一步明确了 JSON 的规范。今天,JSON 已经成为 REST API、微服务通信、配置管理和日志记录中的事实标准。

二、JSON 的基本语法

JSON 的语法非常简洁,核心结构只有两种:

  1. 对象:用花括号 {} 表示,包含一组键值对。
  2. 数组:用方括号 [] 表示,包含一组有序的值。

对象中的键必须是双引号包裹的字符串,值可以是以下类型:

  • 字符串:"hello"
  • 数字:123、3.14、10
  • 布尔值:true、false
  • null:null
  • 对象:{ "name": "Alice" }
  • 数组:[1, 2, 3]

一个典型的 JSON 示例如下:

json

{
  "name": "张三",
  "age": 30,
  "isDeveloper": true,
  "skills": ["JavaScript", "Python", "Go"],
  "address": {
    "city": "北京",
    "zip": "100000"
  },
  "nickname": null
}

需要注意的是,JSON 对格式要求比较严格:

  • 字符串必须使用双引号,不能使用单引号。
  • 对象的键也必须使用双引号。
  • 最后一个元素后面不能有逗号。
  • 不支持注释。
  • 不支持 undefined、函数、日期对象、NaN 或 Infinity。

这些限制让 JSON 更容易被不同语言的解析器统一处理。

三、JSON 的解析与生成

几乎所有主流编程语言都内置或提供了 JSON 支持。以 JavaScript 为例:

javascript

const text = '{"name":"Alice","age":25}';
const obj = JSON.parse(text);
console.log(obj.name); // Alice

const output = JSON.stringify(obj, null, 2);
console.log(output);

Python 中可以使用 json 模块:

python

import json

data = json.loads('{"name": "Alice", "age": 25}')
print(data["name"])

text = json.dumps(data, ensure_ascii=False, indent=2)
print(text)

Java、Go、C#、PHP、Rust 等语言也都有成熟的 JSON 库。解析器通常负责把 JSON 文本转换成语言中的对象、字典或结构体;序列化器则把程序中的数据转换成 JSON 文本。

四、JSON 的常见使用场景

JSON 的应用非常广泛,主要包括:

  1. Web API 数据交换:前后端通过 HTTP 传输 JSON,例如 RESTful API。
  2. 配置文件:许多工具使用 JSON 作为配置格式,如 package.json、tsconfig.json。
  3. 日志与数据管道:JSON Lines 格式每行一个 JSON 对象,便于流式处理。
  4. 移动应用与微服务通信:JSON 体积小、可读性好,适合网络传输。
  5. 数据存储与缓存:MongoDB、Redis 等系统常以 JSON 或类 JSON 形式存储数据。

五、JSON 的优点

JSON 之所以流行,主要因为:

  • 简洁易读:结构清晰,人和机器都容易理解。
  • 语言无关:不依赖 JavaScript,几乎所有语言都支持。
  • 解析速度快:相比 XML,通常更轻量。
  • 表达能力强:支持嵌套对象和数组,能表示复杂结构。
  • 生态成熟:有大量解析库、验证工具和 Schema 标准。

六、JSON 的局限

JSON 并非完美,它也有一些限制:

  • 不支持注释:配置文件里无法直接写注释。
  • 没有日期类型:日期通常被表示为 ISO 8601 字符串。
  • 数字精度问题:JSON 数字没有区分整数和浮点数,JavaScript 中超过 2^53 - 1 的整数可能丢失精度。
  • 不支持二进制数据:二进制通常需要 Base64 编码,体积会增大。
  • 没有内置模式:需要借助 JSON Schema 等工具进行验证。
  • 重复键行为不统一:规范建议键唯一,但解析器对重复键的处理可能不同。

七、JSON 与其他格式的比较

与 XML 相比,JSON 更简洁,解析通常更简单,但 XML 在命名空间、注释和文档描述方面更成熟。与 YAML 相比,YAML 可读性更强、支持注释,但缩进敏感,解析规则更复杂。与 Protocol Buffers、MessagePack 等二进制格式相比,JSON 体积更大、性能稍弱,但可读性和通用性更好。

八、JSON Schema 与扩展

为了弥补 JSON 缺少模式定义的问题,社区提出了 JSON Schema。它可以用 JSON 本身描述 JSON 数据的结构、类型、必填字段和取值范围,常用于 API 校验和文档生成。

此外,还有一些扩展格式:

  • JSON5:允许注释、单引号、尾逗号,适合配置文件。
  • JSONC:带注释的 JSON,常见于 VS Code 配置。
  • JSON Lines / NDJSON:每行一个 JSON 对象,适合日志和流式数据。
  • BSON、MessagePack:二进制表示,提升存储和传输效率。

九、最佳实践与安全注意

使用 JSON 时,建议遵循以下实践:

  1. 始终使用双引号,保持格式合法。
  2. 对来自外部的 JSON 进行 Schema 校验。
  3. 不要使用 eval() 解析 JSON,应使用标准解析器。
  4. 处理大文件时使用流式解析,避免内存暴涨。
  5. 限制请求体大小和嵌套深度,防止资源耗尽攻击。
  6. 注意敏感数据不要直接暴露在前端 JSON 中。
  7. 统一命名风格,如 camelCase 或 snake_case。
  8. 日期使用 ISO 8601 字符串,如 "2026-10-04T12:00:00Z"。

十、总结

JSON 是一种简单、通用、易读的数据交换格式。它凭借轻量级结构和广泛的编程语言支持,成为现代软件系统中传递数据的首选格式之一。虽然它没有注释、日期类型和内置模式,但通过 JSON Schema、JSON5、NDJSON 等扩展,可以覆盖更多场景。理解 JSON 的语法、优缺点和最佳实践,是每一位开发者必备的基础技能。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。