什么是 JSON?通俗指南与示例
JSON(JavaScript Object Notation)是一种简单的文本格式,用于把结构化数据(例如一位客户、一份订单或一个商品列表)写成“名称与值”成对的形式。它便于人阅读,也便于程序生成和解析。当应用和服务通过网络交换数据时,JSON 是目前最常见的格式。
用 AI 构建时 JSON 为什么重要
即使你从不写代码,也会不断接触到 JSON:
- API。 当你的应用界面从后端加载数据,或者后端调用支付、邮件或 AI 服务时,数据通常以 JSON 的形式传输。参见什么是 API。
- 设置文件。 许多项目配置文件都是 JSON,例如
package.json,它列出了一个 JavaScript 项目的依赖。 - 数据库。 Postgres 可以在某一列中存储 JSON(
jsonb类型),用于存放不适合整齐行列结构的数据。参见什么是 Postgres。 - AI 输出。 当你希望 AI 模型返回程序可以直接使用的内容(例如一组标签,或提取出的发票字段)时,通常会要求它返回 JSON。
- 错误信息与日志。 许多错误以 JSON 的形式返回,阅读它往往是找出问题所在最快的方法。
能读懂 JSON,你就能检查应用实际收到了什么,发现缺失的字段,并能向 AI 构建器精确地描述问题。
一个日常类比
想象一张纸质表格:姓名:,电话:,订阅新闻:☐ 是 ☐ 否。每一项都是一个标签加上它旁边的值。JSON 就是这种表格的文本形式,采用严格的格式,计算机无需猜测即可读取。同样,JSON 也可以有嵌套的部分(例如包含街道、城市和邮编的地址块),以及列表(例如多个电话号码)。
JSON 长什么样
下面是一条预约记录的 JSON 形式:
{
"id": 5001,
"customer": "Lena Park",
"service": "Haircut",
"startsAt": "2026-10-03T14:00:00Z",
"price": 35.5,
"paid": false,
"notes": null,
"extras": ["beard trim", "hot towel"],
"contact": {
"email": "lena@example.com",
"phone": "+44 20 7946 0000"
}
}
阅读方式如下:
- 花括号
{ }包裹一个对象,即一组名称与值的配对。 - 每一对的形式是
"名称": 值,各对之间用逗号分隔。 - 方括号
[ ]包裹一个数组,即有序列表。 - 对象和数组可以相互嵌套,就像
contact和extras那样。
六种值类型
JSON 只有六种值类型。这一小组类型也是它能够处处通用的重要原因。
| 类型 | 示例 | 说明 |
|---|---|---|
| 字符串(文本) | "Lena Park" | 始终使用双引号 |
| 数字 | 35.5、-2、1e6 | 不加引号;不带货币符号 |
| 布尔值 | true、false | 小写,不加引号 |
| 空值 | null | 表示“没有值” |
| 对象 | { "city": "Leeds" } | 命名的值 |
| 数组 | [1, 2, 3] | 有序列表;项可以是任意类型 |
JSON 没有日期类型。日期通常以字符串形式书写,一般采用上文所示的 ISO 8601 格式(2026-10-03T14:00:00Z,其中 Z 表示 UTC)。约定统一的格式可以避免一整类时区错误。
严格的规则(错误的来源)
JSON 比看上去更严格。以下都是无效的:
{ name: "Lena" } ← key without double quotes
{ 'name': 'Lena' } ← single quotes
{ "a": 1, "b": 2, } ← trailing comma
{ "a": 1 "b": 2 } ← missing comma
{ "a": 1 // comment } ← comments aren't allowed
你遇到的大多数“Unexpected token”(意外的标记)错误都属于这些情况之一。JSON 校验或格式化工具会准确指出出错的行。
实例:JSON 在应用中的流转
一位客户在美发应用中预约了一次理发。下面是 JSON 出现的位置:
- 预约表单向应用的后端发送以下内容:
{ "service": "Haircut", "startsAt": "2026-10-03T14:00:00Z", "name": "Lena Park" }
- 后端把预约保存到数据库中,并以状态码
201 Created回复以下内容:
{ "id": 5001, "status": "confirmed" }
- 如果该时段已被预约,它则可能改为以状态码
409 Conflict回复:
{ "error": "slot_taken", "message": "That time was just booked. Please pick another." }
页面读取 status 或 error,并显示相应的消息。如果页面显示的是空白屏幕,打开浏览器的开发者工具(Network 标签页)就能看到这些 JSON,这往往是找出问题最快的线索。
关键术语
| 术语 | 含义 |
|---|---|
| 键(Key) | 名称与值配对中的名称,例如 "email"。 |
| 解析(Parse) | 把 JSON 文本转换为程序可以使用的数据。 |
| 序列化 / 字符串化(Serialize / stringify) | 把数据转换为 JSON 文本,以便发送或存储。 |
| 载荷(Payload) | 请求或响应中发送的数据。 |
| 模式(Schema) | 对数据应有结构的描述,包括有哪些字段、各是什么类型。JSON Schema 是编写它的一种标准方式。 |
| JSONB | Postgres 的二进制 JSON 列类型,可以建立索引并进行查询。 |
| NDJSON / JSON Lines | 每行一个 JSON 对象,常见于日志和流式数据。 |
常见误解
- “JSON 就是 JavaScript。” 它的语法源自 JavaScript,但它与语言无关;Python、Java、C#、Go 等都能读取它。
- “加引号的数字也没问题。”
"35"是字符串,不是数字。把两者混用会导致错误,例如"35" + "5"会变成"355"。金额通常更适合以整数分(3550)的形式存储,以避免舍入问题。 - “JSON 是安全的,因为它只是数据。” JSON 可以承载任何内容,包括密钥。不要把 API 密钥放进发送到浏览器的 JSON 中。
- “把所有内容都放进 JSON 列。” 这对灵活的附加信息很方便,但你需要搜索、过滤或关联的数据,通常应当放在正式的列中。
- “AI 总会返回有效的 JSON。” 模型可能会添加多余的文字,或破坏格式。许多服务商提供结构化输出模式;但你的代码仍然应当检查返回的内容。
向 AI 构建器提出的请求
- “给我看看这个端点返回的 JSON 示例。”
- “用带有
error代码和易读message的 JSON 返回错误。” - “以 UTC 格式的 ISO 8601 字符串存储日期,只在屏幕上转换为本地时间。”
- “以整数分的形式存储价格。”
- “在服务器端校验传入的 JSON,拒绝缺少字段或字段类型错误的请求。”
- “调用 AI 模型时,要求它按这种确切的结构返回 JSON,并在使用前进行检查。”
Mythex 中的 JSON
你无需在 Mythex 中手写 JSON——只需描述你想要的内容,智能体就会编写收发 JSON 的代码。不过,认识 JSON 仍然有帮助:出问题时,把 JSON 错误粘贴到聊天中,就能给智能体一个精确的线索。文档中的 REST API 后端配方 从一开始就要求提供“清晰的 JSON 错误”,而 集成任意 API 配方则讲解如何调用外部服务。要了解更宏观的内容,参见REST 与 GraphQL和如何调试 AI 构建的应用。
常见问题
用简单的话说,什么是 JSON?
JSON(JavaScript Object Notation)是一种纯文本格式,用于以“名称和值”的形式记录结构化数据,例如 "name": "Lena"。几乎所有网络 API 都用它来收发数据,许多应用也用它保存设置和存储的数据。
JSON 是一种编程语言吗?
不是。JSON 是一种数据格式,而不是语言。它本身无法执行任何操作,只能描述数据。虽然它源自 JavaScript,但几乎所有编程语言都能读写它。
JSON 和 JavaScript 对象有什么区别?
两者看起来很像,但 JSON 的规则更严格。在 JSON 中,每个键都必须用双引号括起来,字符串使用双引号,不允许注释和末尾逗号,值仅限于字符串、数字、true、false、null、对象和数组。
为什么我的 JSON 显示无效?
常见原因包括:最后一项后面有末尾逗号,使用了单引号而不是双引号,项与项之间缺少逗号,括号没有闭合,或者出现了注释。把它粘贴到 JSON 校验工具中,工具会指出具体的行。