先定义空值的含义

材料没有提供数量,与材料明确写数量为0,是两种不同事实。若程序都用count || 0兜底,缺字段、null和零会被合并,界面可能把未知显示成真实的零。

本例约定count字段必须存在:null表示材料未提供,非负整数表示材料明确给出的数量。缺字段是输出结构待核对,不自动补0。这是教学数据约定,不是Claude自动赋予null的含义。

四份对象需要四种记录

空对象表示没收到count;count:null表示收到“未知”;count:0表示明确零;count:3表示明确正数。后两者都还需回到来源核对数值是否真的被材料支持。

因此“结构通过”和“事实已确认”要分别记录。一个合法JSON字符串可能缺字段;字段存在也可能使用了错误类型。

用四个离线对象区分未知、缺失与明确零;缺字段:missing:输出形状待复核;显式null:unknown:材料未提供;明确0:known_zero:仍需来源核对;明确正数:known_positive:不是事实自动通过
本站原创示意图:用四个离线对象区分未知、缺失与明确零。本站约定的字段语义;未调用模型或迁移数据库。查看大图 ↗

Schema帮助约束形状,语义仍由你定义

若采用官方结构化输出,可按当前支持子集约定字段类型和必填项;请求中解释null的来源语义。不能仅要求返回JSON,再假定模型与下游理解相同的未知值。

文末函数不构造或发送Schema请求,只用Object.hasOwn检查自有字段,并区分状态。它拒绝字符串0、undefined、负数、小数及不安全整数,不做隐式类型转换。

运行四个对象

保存为missing-null-zero.mjs,用Node.js 24 LTS运行node missing-null-zero.mjs --demo。四行依次为missing、unknown、known_zero、known_positive,action分别提示结构复核、保留null或回查来源。

输出的compare_source不是事实验证通过。函数没有原始材料,无法知道3是不是模型猜的;应用需要另外保留来源位置与人工或程序核验结果。

已有默认值怎么排查

沿响应原文、JSON解析、对象转换、数据库默认值、页面显示逐层检查,找出第一次把null改成0的位置。不要只修提示词而保留下游的错误兜底。

空字符串、未回答、不适用也可能各有不同含义;业务需要时应扩展明确状态,而不是把所有东西塞成null。修改约定前保留历史语义,避免旧记录被批量重新解释。

本例没有更新真实数据

实际本地测试验证四种状态、自有属性和非法类型拒绝,没有调用模型、写库或迁移生产字段。它只针对count单字段,不是通用Schema验证器。

上线验收应使用原始资料和完整字段链路,尤其检查统计报表是否把unknown误计成零。缺少资料时保留未知,比生成一个整齐但错误的零值更准确。

参考资料与核验范围

资料核对日期:2026年10月21日。以下为官方原始资料;产品入口和可用范围仍以当前账户为准。

1. [官方资料1](https://platform.claude.com/docs/en/build-with-claude/structured-outputs)