数智星河 发表于 2026-8-28 12:53:48

JSON 完整解析|大模型 LLM 接口开发、结构化输出实战指南

导语

调用大模型 API、开发 RAG 知识库、对接 Web 接口时,JSON 无处不在。很多开发者天天写 JSON,但是并不完全了解标准语法边界、历史由来、序列化反序列化坑点,尤其在大模型要求结构化 JSON 输出时,经常遇到解析报错、格式崩坏。本文从基础定义、语法结构、诞生历史讲起,对比曾经主流的 XML,梳理 JSON 核心优势、原生支持的数据类型、常见语法陷阱,结合 AI 大模型业务场景给出实战代码与最佳实践。
一、什么是 JSON

通俗类比:JSON 就是软件世界的标准集装箱。不管是 Python、Java、JavaScript,还是数据库、大模型服务,把数据装进这套标准集装箱,各个系统之间就可以无障碍搬运、交换信息。
JSON 全称 JavaScript Object Notation,JavaScript 对象表示法,是一套轻量级、文本型的数据交换格式,并不是编程语言。2001 年由 Douglas Crockford 提出,脱胎于 JavaScript 对象字面量语法,如今已经完全语言无关,几乎所有编程语言都具备解析生成 JSON 的能力JSON中...。
JSON 只有两种基础结构,可以互相无限嵌套组合:

[*]对象 Object({}大括号):键‑值对集合。键名必须使用双引号。
[*]数组 Array([]中括号):有序元素列表,元素可以是字符串、数字、布尔、对象、数组。


标准 JSON 示例:
{
"username": "张三",
"age": 28,
"is_vip": true,
"hobbies": ["阅读","AI编程"],
"contact": {
    "email": "test@example.com"
}
}
JSON 原生仅支持 6 种数据类型


[*]字符串 string(必须双引号)
[*]数字 number(整数、浮点数)
[*]布尔 boolean:true / false(小写)
[*]对象 object { ... }
[*]数组 array [ ... ]
[*]null 空值
❗注意:标准 JSON不支持注释,没有原生 date 日期类型,没有undefined、函数类型。
二、JSON 的诞生:为什么取代 XML 成为主流

在 AJAX 网页技术普及早期,XML 是系统之间数据交换的标准格式。XML 依靠成对标签描述数据,标签繁琐冗余,传输体积大,解析开销高。

XML 示例:

<user>
    <username>张三</username>
    <age>28</age>
    <is_vip>true</is_vip>
</user>
JSON 对比 XML 带来的核心优势:

[*]高可读性:结构简洁,人眼可以快速读懂数据,调试排错效率高。
[*]完全语言无关:虽然名字带 JavaScript,但 Python、Java、Go、C# 都有成熟库,异构系统对接无障碍。
[*]体积轻量化,没有大量开闭标签,网络传输字节更少,移动弱网环境表现更好。
[*]天然映射编程语言数据结构:JSON 对象 ↔ 字典 / 结构体;JSON 数组 ↔ 列表。序列化(对象转字符串)、反序列化(字符串转回对象)开发成本低。
[*]生态极其完备:MySQL、PostgreSQL 支持 JSON 字段;MongoDB 文档数据库基于 JSON 变种;HTTP API、消息队列、配置、日志普遍采用 JSON 格式。
补充:XML 并没有完全消失,在传统政务、SOAP 接口、文档解析领域仍有使用,但互联网 API、大模型接口基本全面转向 JSON。
三、两个核心概念:序列化、反序列化


[*]序列化 dumps:内存里面的程序对象 / 字典 → JSON 文本字符串,用于网络请求、存储文件。
[*]反序列化 loads:JSON 字符串 → 程序内存对象,接口拿到响应之后解析使用。
Python 简单示例:
import json

# Python内存字典
data = {
    "model": "qwen2.5‑7b",
    "prompt": "解释什么是JSON",
    "temperature": 0.7
}

# 序列化:对象 → JSON字符串
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)

# 反序列化:JSON字符串 → Python对象
parse_result = json.loads(json_str)
print(parse_result["model"])
四、高频踩坑:标准 JSON 语法易错点


[*]键名、字符串只能使用双引号,单引号不合法

// ❌非法,键用单引号
{ 'name': "张三" }

// ✅合法
{ "name": "张三" }

[*]标准 JSON 不支持//、/* */注释很多编辑器 JSONC 扩展支持注释,但这属于非标准扩展,接口传输会直接解析报错。如果需要备注,可以新增一个"_comment"业务字段来记录说明文字。
[*]对象、数组最后一项禁止尾随多余逗号

// ❌错误,末尾逗号
{"name":"张三", "age":28, }

// ✅正确
{"name":"张三", "age":28}



[*]没有日期类型,时间统一使用ISO‑8601 字符串"2026‑08‑28T10:30:00Z"或者 Unix 时间戳数字,不要写自定义日期字符串。
[*]大整数精度丢失:JavaScript 解析超过2^53的数字会丢失精度;设备序列号、账号长 ID 建议用字符串存储,不要存数字类型CSDN博...。
[*]禁止undefined,空值使用null。
五、AI 大模型业务中的 JSON 实战

现在几乎所有 LLM 对外 HTTP 接口请求、返回体全部使用 JSON。同时结构化输出场景,会要求大模型直接输出 JSON 文本。
1、标准大模型 API 请求示例
{
"model": "qwen2.5‑7b‑instruct",
"messages": [
    {"role":"user","content":"请总结下面文档内容"}
],
"temperature":0.1,
"max_tokens":1024
}

2、大模型结构化输出常见问题

大模型经常在 JSON 前后输出自然语言解释文字,造成json.loads()直接抛解析异常。工程处理方案:

[*]Prompt 明确约束:只输出 JSON,不要多余解释文字;
[*]使用模型原生 JSON‑Mode;
[*]代码层面做字符串清洗,截取{}或者[]包裹的片段再反序列化;
[*]使用 JSON Schema 校验输出字段合法性。
注意:流式 SSE 返回并不是完整 JSON,是一条条独立 JSON 片段,业务代码需要逐行解析。
六、新手高频认知误区澄清

误区 1 JSON 是 JavaScript 专属格式

纠正:名字来源于 JS 语法,但是完全语言无关,所有主流编程语言都支持 JSON。
误区 2 JSON 可以写 // 注释

纠正:标准 JSON 不支持注释;JSONC/JSON5 是扩展格式,网络接口传输不要使用。
误区 3 写 JSON 可以随便用单引号

纠正:标准 JSON 键和字符串必须双引号,单引号属于部分语言的对象语法,不是合法 JSON。
误区 4 JSON 自带 date 日期数据类型

纠正:没有日期类型,用 ISO‑8601 时间字符串或者时间戳数字。
误区 5 把程序对象直接当成 JSON

纠正:Python 字典、JS 对象不等于 JSON;必须经过 dumps 序列化得到 JSON 字符串。
七、本期全文总结

1 JSON 是轻量级文本数据交换格式,只有对象{}、数组[]两种基础结构,一共 6 种原生数据类型;键名、字符串必须双引号,标准格式不支持注释。2 诞生背景:用来替代笨重的 XML,优势是可读性好、语言无关、体积小、天然映射程序内存数据,生态强大。3 序列化:内存对象转为 JSON 字符串;反序列化:JSON 字符串转回程序对象,二者是网络接口开发最基础操作。4 开发高频坑:禁止注释、禁止末尾逗号、长 ID 用字符串、日期用 ISO‑8601,不使用单引号。5 AI 大模型开发:LLM 接口全部使用 JSON;结构化输出要处理模型额外文本干扰,必要时搭配 JSON Schema 校验。6 JSON 只是数据载体,业务上还需要额外做字段、类型校验,不能拿到字符串就直接反序列化信任使用。
页: [1]
查看完整版本: JSON 完整解析|大模型 LLM 接口开发、结构化输出实战指南