对标对象
Go 标准库 encoding/json:https://github.com/golang/go/tree/master/src/encoding/json
重点参考范围:
src/encoding/json v1 测试、fuzz、benchmark。
src/encoding/json/jsontext 的 token/value coder、resumable decoder、format fuzz 思路。
src/encoding/json/internal/jsonwire 的底层 JSON 语法原子测试。
goexperiment.jsonv2 相关测试中可迁移的方法论;不追求 qjson 兼容 Go struct tag / reflection API。
背景
为了进一步提升 qjson 的正确性、稳定性和高性能表现,需要完整比较 Go 生态默认 JSON 实现的质量保障体系,识别 qjson 当前还缺少哪些测试维度、边界用例和回归防护。
qjson 当前已经具备 Rust/Lua 双层测试、JSONTestSuite、RFC 8259 conformance、serde 差分 fuzz、FFI state-machine fuzz、scanner backend cross-check、Lua property tests、Miri/ASan/Valgrind、OpenResty runtime matrix 和 benchmark。这个 issue 作为汇总任务,用于跟踪从 Go encoding/json 借鉴后仍值得补齐的质量保障工作。
目标
系统梳理 encoding/json 在 JSON 语法、数字 ABNF、字符串与 Unicode、错误处理、深度限制、兼容性、fuzz/回归测试和性能基准等方面的保障方式,并评估哪些方法应迁移或改造到 qjson。
预期产出是一组面向 qjson 的可独立落地任务。每个子任务应能独立开发、独立验收,并在完成后回到本 issue 勾选。
拆分原则
不按 P0/P1 大类直接拆 issue,而是按“可独立落地、可独立验收”的工作项拆分。
优先级用于决定推进顺序:
- P0:优先补齐,直接影响正确性边界、模式语义或 benchmark 可信度。
- P1:增强长期稳定性和语料体系,也纳入本轮要完成的质量提升范围。
P0 子任务
#135 test: 补充 Go-style JSON grammar corpus
补齐 number、string、literal、trailing content、parse error offset 等语法边界测试。重点借鉴 Go number_test.go、scanner_test.go、internal/jsonwire/decode_test.go 的表驱动方式。
#136 test: 补充 EAGER/LAZY 模式关系测试
固定 qjson 自己的模式语义:EAGER 接受则 LAZY 应接受;value-level 错误在 LAZY 下延迟到访问时报错;depth 错误两种模式都拒绝;trailing content 的 eager-only 行为要明确测试。
#137 bench: 为 benchmark 增加 correctness smoke
在性能计时前先验证 qjson/cjson/simdjson 关键访问结果和 encode/modify+encode 输出语义正确,避免 benchmark 只测速度、不测结果。
P1 子任务
#138 fuzz: 增加 cursor/token replay semantic fuzz
借鉴 Go jsontext.FuzzCoder 的 token/value replay 思路,覆盖 qjson cursor 遍历、object entry、field lookup、array index、root getter/cursor getter 一致性,以及 skip-cache cold/warm path。
#139 test: 建立 real-world fixture manifest
建立统一真实语料 manifest,让正确性测试、benchmark smoke 和 benchmark harness 可以复用 fixture 来源、关键访问路径、expected values 和 workload 分类。
#140 test: 扩展 max-depth stress tests
覆盖默认深度、配置上限、越界输入、EAGER/LAZY 一致性、array/object/mixed nesting,以及极深输入的非递归稳定性。
暂不跟踪
以下增强项暂不纳入本轮汇总,不创建子 issue:
- Go differential syntax corpus。
- Go/RFC 8785 numeric formatting regression subset。
验收标准
- P0 和 P1 子任务全部完成并勾选。
- 每个已完成子任务都有对应测试、命令或文档说明。
- 新增测试不会重复已有覆盖,或明确说明为什么需要重复覆盖作为回归防护。
- 如果后续确认需要继续扩展,应从本 issue 追加新的独立子 issue,而不是把实现细节堆在汇总 issue 内。
对标对象
Go 标准库
encoding/json:https://github.com/golang/go/tree/master/src/encoding/json重点参考范围:
src/encoding/jsonv1 测试、fuzz、benchmark。src/encoding/json/jsontext的 token/value coder、resumable decoder、format fuzz 思路。src/encoding/json/internal/jsonwire的底层 JSON 语法原子测试。goexperiment.jsonv2相关测试中可迁移的方法论;不追求 qjson 兼容 Go struct tag / reflection API。背景
为了进一步提升 qjson 的正确性、稳定性和高性能表现,需要完整比较 Go 生态默认 JSON 实现的质量保障体系,识别 qjson 当前还缺少哪些测试维度、边界用例和回归防护。
qjson 当前已经具备 Rust/Lua 双层测试、JSONTestSuite、RFC 8259 conformance、serde 差分 fuzz、FFI state-machine fuzz、scanner backend cross-check、Lua property tests、Miri/ASan/Valgrind、OpenResty runtime matrix 和 benchmark。这个 issue 作为汇总任务,用于跟踪从 Go
encoding/json借鉴后仍值得补齐的质量保障工作。目标
系统梳理
encoding/json在 JSON 语法、数字 ABNF、字符串与 Unicode、错误处理、深度限制、兼容性、fuzz/回归测试和性能基准等方面的保障方式,并评估哪些方法应迁移或改造到 qjson。预期产出是一组面向 qjson 的可独立落地任务。每个子任务应能独立开发、独立验收,并在完成后回到本 issue 勾选。
拆分原则
不按 P0/P1 大类直接拆 issue,而是按“可独立落地、可独立验收”的工作项拆分。
优先级用于决定推进顺序:
P0 子任务
#135 test: 补充 Go-style JSON grammar corpus
补齐 number、string、literal、trailing content、parse error offset 等语法边界测试。重点借鉴 Go
number_test.go、scanner_test.go、internal/jsonwire/decode_test.go的表驱动方式。#136 test: 补充 EAGER/LAZY 模式关系测试
固定 qjson 自己的模式语义:EAGER 接受则 LAZY 应接受;value-level 错误在 LAZY 下延迟到访问时报错;depth 错误两种模式都拒绝;trailing content 的 eager-only 行为要明确测试。
#137 bench: 为 benchmark 增加 correctness smoke
在性能计时前先验证 qjson/cjson/simdjson 关键访问结果和 encode/modify+encode 输出语义正确,避免 benchmark 只测速度、不测结果。
P1 子任务
#138 fuzz: 增加 cursor/token replay semantic fuzz
借鉴 Go
jsontext.FuzzCoder的 token/value replay 思路,覆盖 qjson cursor 遍历、object entry、field lookup、array index、root getter/cursor getter 一致性,以及 skip-cache cold/warm path。#139 test: 建立 real-world fixture manifest
建立统一真实语料 manifest,让正确性测试、benchmark smoke 和 benchmark harness 可以复用 fixture 来源、关键访问路径、expected values 和 workload 分类。
#140 test: 扩展 max-depth stress tests
覆盖默认深度、配置上限、越界输入、EAGER/LAZY 一致性、array/object/mixed nesting,以及极深输入的非递归稳定性。
暂不跟踪
以下增强项暂不纳入本轮汇总,不创建子 issue:
验收标准