DeepSeek 生成的 JSON 要先通过语法和结构校验,再交给程序使用。本例检查一个记录列表:每条记录必须有字符串 id、字符串 name 和非负整数 qty,并检查编号是否重复。
准备输入与运行环境
使用 Python 3.11 标准库即可。创建 data.json,写入 [{"id":"001","name":"演示商品","qty":2}]。只保存 JSON 内容,不带 Markdown 的三反引号。示例记录是虚构数据。

给 DeepSeek 的任务说明
输出 JSON 数组,每项仅含 id、name、qty。id 和 name 为非空字符串,qty 为非负整数,不允许布尔值;id 唯一。不要在 JSON 前后添加说明或代码围栏。不知道的值不要编造,先说明缺少输入。
在本地运行与检查
将下面代码保存为 example_03.py。进入保存该文件的目录,在终端执行 python example_03.py。代码应由你检查后执行,按实际字段修改。
import json
from pathlib import Path
def reject_constant(value):
raise ValueError("禁止非标准 JSON 常量: " + value)
def unique_keys(pairs):
obj = {}
for key, value in pairs:
if key in obj:
raise ValueError("重复字段: " + key)
obj[key] = value
return obj
try:
data = json.loads(Path("data.json").read_text(encoding="utf-8-sig"),
parse_constant=reject_constant, object_pairs_hook=unique_keys)
except json.JSONDecodeError as exc:
raise SystemExit(f"JSON 语法错误: 第 {exc.lineno} 行第 {exc.colno} 列")
if not isinstance(data, list):
raise ValueError("最外层应是数组")
seen = set()
for i, row in enumerate(data, 1):
if not isinstance(row, dict) or set(row) != {"id", "name", "qty"}:
raise ValueError(f"第 {i} 条字段不正确")
if any(not isinstance(row[k], str) or not row[k].strip() for k in ("id", "name")):
raise ValueError(f"第 {i} 条文本字段不正确")
if type(row["qty"]) is not int or row["qty"] < 0:
raise ValueError(f"第 {i} 条 qty 必须是非负整数")
if row["id"] in seen:
raise ValueError("编号重复: " + row["id"])
seen.add(row["id"])
print("validated records", len(data))
为什么解析成功还不够
JSON 语法正确不代表字段符合应用要求。比如 "qty":"2" 是合法 JSON,但本例要求整数,必须拒绝;Python 中布尔值是整数的子类,因此用 type(...) is int 排除 true 和 false。
校验失败怎样发回模型
把错误行号、字段要求和脱敏的失败记录发给 DeepSeek,要求只修复指出的问题。不要直接用字符串替换全部单引号:字符串内容本身可能含引号,会破坏有效文本。官方 JSON Output 文档还说明,结构化输出可能出现空内容,调用方仍要检测。
怎样确认结果正确
合法示例应输出 validated records 1。将 qty 改为 “2”、true 或 -1,均应被拒绝;删除一个双引号应报告语法行列位置;复制同编号记录应报告编号重复。只有这些检查通过,才继续把 data 传给业务函数。
适用边界与常见问题
这段代码验证示例结构,不能证明商品名称、库存或模型生成事实真实。文件为空、过大或记录数量超出业务限制时应先拒绝或限制读取。本例没有接入生产系统,也没有验证任意外部 JSON Schema。
资料依据
接口说明核验日期:2026 年 10 月 1 日。Python JSON 标准库;DeepSeek JSON Output。
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30141.html