TSON:让 JSON 拥有不可变哈希校验的超集

TSON – A JSON superset with immutable, hash-pinned schemas

TSON:让 JSON 拥有不可变哈希校验的超集

TSON 是一个基于 Unicode 优先设计的 JSON 超集,它引入了不可变且通过哈希固定的 Schema 系统。在这个系统中,数据与 Schema 共享相同的解析器和工具链,单个哈希值即可验证整个数据链的完整性。TSON 不仅支持默认必填、可选字段、枚举及类型组合等高级特性,还彻底解决了传统 Schema 系统中添加必填字段必须破坏兼容性的痛点。通过不可变版本控制,新旧 Schema 可共存,迁移过程变为精确的数学变换。此外,TSON 优化了数字、字符串和注释的书写体验,让开发者在享受 JSON 兼容性的同时,获得更严谨的数据契约。

一个哈希值即可验证整个链条。
  1. kbolino

    把 sha256 哈希放在查询字符串里,却又声称“哈希参数是验证元数据,而非身份标识”,这根本说不通。URL 的 ?query 部分本该发送给服务器。如果你想添加客户端(元)数据,应该使用 URL 的 #fragment 部分。参见 RFC 3986 第 3.4 和 3.5 节:https://datatracker.ietf.org/doc/html/rfc3986#section-3.4

  2. thyristan

    不喜欢。

    不支持注释意味着无法将其用于配置。属性重复了 XML 在属性/内容二分法上的错误。

    而且将尾随逗号视为语法错误,阻碍了数组的轻松排序、追加和编辑。

    此外,它并没有解决 JSON 的大量问题,比如字符串中包含换行符、引号等,反而引入了大量新问题,例如依赖晦涩的 Unicode 特性来省略引号。这将导致 TSON 同形字攻击。

  3. Retr0id

    作为 JSON 超集的合理性是什么?与大多数现有 JSON 工具和接口不兼容是一个巨大的劣势,所以必须得有实实在在的好处。

    另外,我看到了关于哈希的提及,但没看到关于规范化(canonicalization)的说明。修改 Schema 的空白字符会改变其哈希值吗?

  4. gwbas1c

    这试图解决什么问题?

    > 具有不可变 Schema 的数据。

    > TSON(Typed Schema Object Notation)是一个 Schema 系统,拥有不可变且哈希固定的 Schema,其定义本身也是数据。文档命名其 Schema,Schema 命名其元 Schema;一个哈希即可验证整个链条。锦上添花的是,TSON 的数据格式是一个以 Unicode 为先的 JSON 超集,你会真正享受编写它的过程。

    我不太确定这到底在解决什么问题?

    我很少遇到 JSON Schema 验证的问题;即便遇到,失败模式也不是我想委托给第三方库去处理的。

    基本上,我的应用程序如何处理格式错误的 JSON,是我定义应用程序方式的一部分,这意味着意外的 JSON 需要逐案处理。

    ---

    总之,这个系统闻起来很像 xsd,而当我使用它时,觉得完全不值得花那个功夫。

  5. eventualcomp

    为了自己的 sanity,我直接使用 Amazon Ion 作为我首选的 JSON 超集,并在(如果)必要时降级转换为 JSON,它甚至还不赖,而且支持注释。天哪,现在甚至有个 Lisp 版本(Fusion)。https://ion-fusion.dev/

    鉴于这是个大厂技术,我敢打赌它短期内不会消失。

同日更多故事

2026-08-05