JSON 数据结构基础

JSON 数据结构的详细说明:对象、数组、嵌套、类型,以及 API 中常见的结构模式

生产方式:人写签发:晓黎学习复核:2026年9月19日被 9 个词条引用

什么是 JSON?

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它用纯文本表示结构化数据,人类可读,机器也容易解析。

在 API 中的角色:客户端和服务器之间传递数据时,几乎都用 JSON。

两种核心结构

1. 对象(Object)

用 {} 包裹,是一组 键值对(key-value pairs)。

{
  "name": "张三",           ← key: "name",value: "张三"
  "age": 25,               ← key: "age",value: 25
  "is_student": true       ← key: "is_student",value: true
}

类比:对象就像一本字典或一个人的档案袋。每个字段(键)对应一个值,你可以通过键来查找值。

在 Python 中的等价物:dict 在 JavaScript 中的等价物:Object

2. 数组(Array)

用 [] 包裹,是一组有序的值。

["苹果", "香蕉", "橙子"]

类比:数组就像购物清单——有顺序,每个位置有对应的内容。

在 Python 中的等价物:list 在 JavaScript 中的等价物:Array

数据类型速查

JSON 类型写法示例Python 类型说明
字符串"你好"str文本,必须用双引号
数字25, 3.14int / float整数或小数,不要加引号
布尔值true, falsebool注意全小写,没有引号
空值nullNonePython 中用 None
对象{"key": "val"}dict键值对集合
数组[1, 2, 3]list有序值列表

嵌套:组合使用

实际 API 响应中,对象和数组几乎都会嵌套使用:

{
  "user": {                              ← 对象里套对象
    "name": "张三",
    "contact": {
      "email": "zhangsan@example.com"    ← 三层嵌套
    }
  },
  "orders": [                             ← 对象里套数组
    {
      "id": "001",
      "items": ["苹果", "香蕉"]           ← 数组里套对象,对象里套数组
    },
    {
      "id": "002",
      "items": ["橙子"]
    }
  ]
}

通俗比喻:这就像一份外卖订单:

  • 最外层 {} = 整个订单
  • user = 订餐人信息(又是一个对象)
  • orders = 订单列表(数组),每个订单又是一个对象

API 中常见的 JSON 结构模式

模式 1:简单键值对

{
  "model": "gpt-4o",
  "temperature": 0.7,
  "max_tokens": 1024
}

适用场景:配置参数、设置选项

模式 2:消息数组

{
  "messages": [
    {"role": "system", "content": "你是一个翻译助手"},
    {"role": "user", "content": "你好"},
    {"role": "assistant", "content": "Hello!"},
    {"role": "user", "content": "谢谢"}
  ]
}

适用场景:对话历史。每个消息有 role(角色)和 content(内容)。

模式 3:混合嵌套(AI API 响应)

{
  "id": "msg_01A...",
  "type": "message",
  "role": "assistant",
  "content": [
    {
      "type": "text",
      "text": "让我帮你查一下。"
    },
    {
      "type": "tool_use",
      "id": "toolu_01A...",
      "name": "get_weather",
      "input": {
        "location": "Shanghai"
      }
    }
  ],
  "model": "claude-sonnet-4-5",
  "usage": {
    "input_tokens": 100,
    "output_tokens": 50
  }
}

拆解结构:

  • 外层是对象(整条消息)
  • content 是数组(可能包含文本块 + 工具调用块)
  • 每个内容块是对象(有 type、text/input 等字段)
  • usage 是对象里的对象(嵌套统计信息)

模式 4:工具调用参数

{
  "name": "get_weather",
  "description": "获取指定城市的天气",
  "input_schema": {
    "type": "object",
    "properties": {
      "location": {
        "type": "string",
        "description": "城市名,如 Shanghai"
      },
      "unit": {
        "type": "string",
        "enum": ["celsius", "fahrenheit"]
      }
    },
    "required": ["location"]
  }
}

拆解结构:

  • input_schema 本身就是一个完整的 JSON Schema(用来描述数据结构的结构)
  • properties 是对象,定义了每个参数的类型和描述
  • required 是数组,列出了必填字段

JSON vs. JavaScript 对象

很多人混淆,关键区别:

特性JSONJavaScript 对象
键的引号必须有双引号可以省略
字符串引号必须用双引号单引号、双引号都行
函数❌ 不支持✅ 可以有方法
undefined❌ 不支持✅ 是合法值
Date 对象❌ 不支持,要用字符串✅ 原生支持
// JavaScript 对象(合法)
const user = {
  name: "张三",         // 键可以不加引号
  greet() {             // 可以有函数
    // 输出问候语
  }
}

// JSON(合法)
{
  "name": "张三",        // 键必须有双引号
  "greet": "你好"       // 不能有函数,只能用字符串
}

JSON 的严格规则

  1. 键必须用双引号:{"name": "张三"} ✅,{name: "张三"} ❌
  2. 字符串必须用双引号:"hello" ✅,'hello' ❌
  3. 不能有尾随逗号:{"a": 1,} ❌,{"a": 1} ✅
  4. 布尔值全小写:true / false ✅,True / False ❌
  5. 空值是 null:{"a": null} ✅,{"a": None} ❌

如何解析 JSON

在代码中使用

Python:

import json

# 字符串 → Python 对象
data = json.loads('{"name": "张三", "age": 25}')
print(data["name"])  # 张三

# Python 对象 → JSON 字符串
json_str = json.dumps({"name": "张三"})

JavaScript:

// 字符串 → JavaScript 对象
const data = JSON.parse('{"name": "张三", "age": 25}');
// data.name 访问得到 "张三"

// JavaScript 对象 → JSON 字符串
const jsonStr = JSON.stringify({ name: "张三" });

命令行(curl 测试 API):

curl -s https://api.example.com/data | jq .

常见错误

错误原因解决方法
SyntaxError: Unexpected tokenJSON 格式错误(少逗号、引号不匹配等)用 jq . 或在线 JSON 校验工具检查
TypeError: Cannot read property 'x' of undefined访问了不存在的字段先检查响应结构,用 ?. 可选链
中文乱码编码问题确保使用 UTF-8,API 响应头应有 charset=utf-8
null vs undefined混用两种空值概念JSON 里只有 null,代码中要注意转换

在 AI API 中的实际应用

理解这些结构后,再看 AI API 的文档就会清晰很多:

  • 请求体:一个 JSON 对象,包含 model(字符串)、messages(消息数组)、tools(工具定义数组)等字段
  • 响应体:一个 JSON 对象,包含 content(内容块数组)、usage(使用统计对象)等字段
  • 工具参数:input 字段是一个嵌套的 JSON 对象,结构由 input_schema 定义

返回 REST API 基础概念 了解 API 的请求/响应流程 返回 SSE 流式输出原理 了解流式传输的 JSON 数据结构

互链

链接来自概念卡正文里的双链,编译时能解到本期词条集的才成为站内链接。

反链(9)

出现在哪些课时里(0)

判据与「课时正文里能不能点出来」是同一个:那一节确实提到了它。点课时走当前页跳转, 它是导航,不是词条链接。

还没有课时讲到这一条。它是词条跑在课程前面的那一部分,不是错链。

关联图

只画这一条与它直接相连的词条,边与上面两区同源。可拖拽、可缩放,点节点是新标签。

出处

路径是本地知识库(Obsidian 库)里的位置,正文与概念卡逐字对应。

  • 概念卡原文JSON 数据结构基础03_RESOURCES/概念/json-数据结构基础.md
  • 所属知识地图栏目概念页索引 · API 与后端基础03_RESOURCES/概念/Index.md

编译入库:2026年11月2日。词条由知识库编译而来, 修正要回到概念卡改,再重新编译。