先定义程序真正需要的结构

让 ChatGPT 输出 JSON 时,不要只说“给我 JSON 格式”。先约定顶层是数组还是对象、每条记录有哪些字段、字段的类型和缺失值如何表示。本文自拟两条活动记录,只演示结构审查;展示的 JSON 是编辑编写并用 Python 解析的参考例子,未声称模型实际输出了这些字节。

JSON 核对:语法正确还要回到原文。01 / 先约定结构:数组内每条都有四个指定字段,date 和 capacity 允许 null,不能补造值;02 / 只输出标准 JSON:双引号、true/false、null;无代码围栏,屏幕看着整齐,不等于解析器接受;03 / 解析并检查类型:先用 json.loads,再逐条核对字段,解析成功仍需核对名额与原文一致;04 / 失败时定点修复:标出字段或语法位置,保存原始材料,修复格式不能顺便改动事实
自拟两条活动记录 · Python 解析仅验证参考样例。本站原创教学图,非模型实测截图。查看大图 ↗

用两条足够小的记录说明字段

原始材料是:“活动A,2026-10-20,20个名额,报名开放”;“活动B,日期待定,名额未确定,报名未开放”。目标字段依次是 code、date、capacity、registration_open。code 与 date 是字符串;capacity 是整数或 null;registration_open 是布尔值。日期未确定时 date 用 null 而不是一个编造日期,所以还需明确 date 也允许 null。

参考结果:[{"code":"A","date":"2026-10-20","capacity":20,"registration_open":true},{"code":"B","date":null,"capacity":null,"registration_open":false}]。这里 false 只对应材料中的“未开放”,不能将“没有提到是否开放”也推成 false。输入材料若没说明,应另设 unknown 规则,而不是暗中填值。

提示词要求输出本身可解析

要求“只输出 JSON 数组,不加 Markdown 围栏、开场白和解释”;指定 UTF-8 文本,键名完全照约定,不补活动地点、价格或报名链接。常见错误包括单引号包字符串、在最后一项后多写逗号、布尔值写成 True/False,以及把 null 写成中文“未知”。这些在屏幕上像数据,标准 JSON 解析器却可能拒绝。

说明字段顺序有助于人阅读,但消费者应依键名读取,不能依赖对象键在视觉上的排列。更关键的是数组内每条记录都具有相同字段与预期类型。

用解析和类型检查做第二道门

可以用 Python 的 json.loads(text)先检查语法,再逐条检查键集合、类型与允许的空值。解析成功不等于语义正确:如果把活动B的capacity写成20,语法仍然完全合法。核对时必须回到原始材料,逐行比对,不把能解析当作真实可信。

本例在本地 Python 3.9.6 中解析了上面的参考字符串并断言两条记录的字段和类型;它是代码核对,不是 ChatGPT 的运行截图。若程序需要额外字段,应先修改约定和样例,再生成一次,避免应用端悄悄容忍缺字段。

处理失败时保留原始输入

若解析失败,记录出错位置,让模型只修复语法,不请它重新“补全信息”;若类型不符,指出具体记录与字段。保存原始材料和候选结果,人工核对修复前后是否改动了日期或名额。批量处理含敏感信息前,还需按工作场景确认是否可以传给第三方工具。

这个方法适合程序要读入的结构化结果。若只是给同事阅读,普通表格可能更直接;不要为了显得专业而强制把每次沟通变成 JSON。