科技 · 实用指南
JSONDecodeError 停在第 1 行第 1 列?先检查字节再改解析器
字符零只说明失败位置,不说明原因。先保留状态码、媒体类型、正文长度和安全字节指纹,区分空正文、HTML、解码或截断,再修复生产端或调用端契约,并用有效、空与无效样本验收。

字符零只说明失败位置,不说明原因。先保留状态码、媒体类型、正文长度和安全字节指纹,区分空正文、HTML、解码或截断,再修复生产端或调用端契约,并用有效、空与无效样本验收。
JSON 文本必须包含一个序列化值;空白或空正文不是 JSON。 Python 在输入不是有效 JSON 文档时抛出 JSONDecodeError。
1. 解析前冻结响应信封
记录方法、脱敏 URL、状态、重定向、Content-Type、Content-Encoding、声明长度、实收字节数、运行时和准确异常。政策允许时只保留正文哈希和短脱敏前缀,绝不记录令牌、Cookie 或完整个人数据。
正文只读取一次,并标明缺失、零字节、纯空白、HTML、类似 JSON 的文本或不可解码字节。不要在同一已消费流上先调用 json()、text() 再调用 json(),然后把第二次失败误判为生产端故障。
2. 判定字符零处到底是什么
位置零为空或空白,通常指向无正文契约、过早关闭或丢弃载荷。首字节为小于号常表示登录页、代理页或错误页 HTML。其他前缀可暴露错误端点、BOM、编码不匹配或压缩问题。
把真正 JSON 开始后的语法错误与字符零失败分开。记录行、列和绝对位置,但把它们当作位置而非根因。校验完整文档,因为尾随数据、截断与拼接多个 JSON 值需要不同修复。
3. 追踪生产端与转换链
从应用处理器沿中间件、代理、缓存、解压器到客户端库追踪响应。用请求 ID 和时间戳关联,但不复制秘密。确认哪一层设置状态、媒体类型、编码和正文,以及重定向是否换了端点。
对文件要证明准确路径、字节长度、编码和原子写边界。新建空文件、陈旧临时文件或并发半写入不会因放宽解析器而修复;在下一次覆盖前保存失败字节。
4. 修复契约而不是掩盖症状
若成功响应按契约没有表示,就显式建模该分支且不解析。若承诺 JSON,生产端必须返回有效 JSON 值与正确 Content-Type;HTML 到达时修复认证、代理或路由;编码与解压问题在责任层修复。
只捕获精确解码异常,用于加入安全上下文或转换为类型化契约错误。不要返回空对象、重试所有语法错误或随意剥字符,这会隐藏数据丢失、重复副作用或上游故障。
5. 用三类样本与可观察失败验收
测试有效 JSON、预期无正文以及无效或错误媒体类型三类响应。有效样本应解析成预期类型,空样本应进入文档化的无内容分支,无效样本应以类型化诊断和安全证据失败。
在代表性流量下核解析错误率、正文长度分布、状态与媒体类型不匹配、重定向和重试。成功意味着生产者与消费者一致、失败可见、敏感正文未被记录且回滚明确。
