Skip to content

质量提升:对标 Go encoding/json 补齐 qjson 质量保障体系 #132

@membphis

Description

@membphis

对标对象

Go 标准库 encoding/jsonhttps://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.goscanner_test.gointernal/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 内。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions