JSON 在 AI 时代正在走向消亡

0 阅读5分钟

我们每天都在和 JSON 打交道。

从 API 接口、微服务架构到配置文件、功能开关(Feature Flags),甚至是那些我们根本察觉不到的数据载荷,JSON 无处不在。它就像是开发者的“家常便饭”,自然到让我们几乎忘了它的存在。

然而,当你开始深入接触大语言模型(LLM)时,你会发现 JSON 变得有些……尴尬

没错,它确实能用,这一点毋庸置疑。

但在 AI 的世界里,JSON 显得过于笨重且缓慢。当你审视 Token(字符令牌) 的消耗时,它更是贵得惊人。别忘了,在 AI 领域,Token 就是真金白银

这就是 TOON 诞生的背景。

它并不是要全盘取代 JSON,但在你与大语言模型进行对话交互时,它是一个极具实战意义的新选择。

关于 JSON 与大语言模型(LLM)的真相

当我们向 LLM 发送数据时,我们发送的并不是真正的“对象”或“结构”。

我们发送的是 Token(令牌)。

每一个字符都至关重要。大括号、引号、逗号、空格、换行符——无一例外。LLM 并不在意 {} 是否能让数据在人类眼里看起来更美观,它们看到的只是更多需要处理的 Token。

Token 越多,意味着:

  • 更高的成本
  • 更慢的推理速度
  • 模型产生混乱的可能性更大

而 JSON 里的很多内容,纯粹是为了迁就人类的阅读习惯而存在的。

“但 JSON 已经是结构化的了,能有什么问题?”

让我们看个具体的例子:

拿一个简单的 JSON 载荷来说——包含姓名、邮箱、国家等几个字段。整洁、有效、中规中矩。

但你仔细观察就会发现:

  • 到处都是成对的大括号
  • 每个键(Key)和值(Value)都要加双引号
  • 每个字段后面都有逗号
  • 还有空格和缩进

这一切都会转化为 Token,但没有一个能增加实际的语义。 这就是核心问题所在。


走进 TOON (Token Oriented Object Notation)

TOON 的全称是 Token Oriented Object Notation(面向 Token 的对象表示法)。

它的理念非常简单,说实话,现在回想起来甚至觉得理所当然: 保留结构,剔除噪音。

TOON 是 JSON 的无损表达方式,但专门为 LLM 的输入进行了优化。 没有引号。没有逗号。没有括号。极简的空格。 它依然可读,依然有结构,只是……变得非常精简。


JSON vs TOON:一个小例子

我拿了一个简单的 JSON 个人资料,并使用 JSON → TOON 转换器进行了处理。

Token 统计结果:

  • JSON: 68 个 Token
  • TOON: 48 个 Token
  • YAML: 51 个 Token
  • XML: 77 个 Token

这只是一个非常小的载荷。 而我们已经减少了约 30% 的 Token。

没什么魔法,只是去掉了那些无用的字符。

image.png

image.png

image.png

image.png

TOON 真正大放异彩的地方:数组与嵌套数据

现在情况变得有趣了。

我尝试用同样的逻辑处理一个包含 50 名用户 的列表:

  • id
  • name
  • email
  • gender
  • country 非常常规的数据。

Token 计数统计:

  • JSON: 1481 tokens
  • TOON: 993 tokens
  • YAML: 1710 tokens
  • XML: 2690 tokens

请再读一遍: 1481 → 993。

这已经不单纯是“优化”了,这是一种完全不同的思考方式

TOON 会将结构统一的数组扁平化为类似 CSV 的表格:

  • 一个标题行(键名)
  • 每个对象占一行
  • 没有分隔符,没有引号,没有噪音

大语言模型(LLM)非常青睐这种格式。

image.png

image.png

为什么 LLM 实际上更偏好 TOON

TOON 结合了两种理念:

  • 基于缩进的结构(类似于 YAML)
  • 针对统一数组的表格化布局(类似于 CSV)

这使得数据模式更容易被模型捕捉。 更少的杂讯,更多的信号。

TOON 项目的基准测试显示:

  • 更低的 Token 使用量(通常减少 30%–50%

  • 相比 JSON 略高的准确率

    • 提升不算巨大,但确实存在。
    • 在生产环境中,微小的改进会产生复利效应。

image.png

现实情况:TOON 并非“JSON 杀手”

我们要明确一点:

JSON 并没有消亡。

你明天并不会用 TOON 来替换掉现有的 REST API、配置文件或前后端协议。 TOON 不是给人类读的,它不适合用来持久化存储,也不是为了通用互操作性而生的。

它的存在只为了一个目的: 高效地与大语言模型(LLM)对话。

仅此而已。


这在实际系统中如何运作?

实际的开发流程通常是这样的:

  1. 你的应用照常使用 JSON 处理业务(一如既往)。
  2. 在调用 LLM 之前,将 JSON 转换为 TOON
  3. 将 TOON 作为提示词(Prompt)发送给模型。
  4. (可选)如果需要,再将模型的响应转回 JSON。

你不需要重构整个系统。 你只是停止了对 Token 的浪费。


一个简单的 Java + LLM 实验

我使用以下工具做了一个小型演示:

  • Java
  • 本地运行的 LLaMA 2
  • 第三方 JSON → TOON 转换库

同样的个人资料数据,统计如下:

  • JSON 输入:90 tokens
  • TOON 输入:51 tokens
  • 节省量:在这个微小的载荷上节省了 39 tokens

将这一比例扩大到数千次请求,成本差异就会变得非常真实。


没人提过的权衡(代价)

TOON 也有它的缺点:

  • 工具链不成熟:大多数框架还没有原生支持。
  • 调试痛苦:手动调试 TOON……绝对谈不上愉快。
  • 人类偏好:人类依然更喜欢阅读 JSON。

而且,模型处理 JSON 本身也没问题。TOON 是一种优化手段,而非硬性要求。


所以……JSON 真的死了吗?

并没有。

但显而易见的是,JSON 并不是为了 LLM 时代而设计的。 我们正在使用一种“人类友好型”格式,去跟一个按字符计费的机器对话。 这种不匹配在当下至关重要。

也许赢的是 TOON,也许是其他替代者。 但趋势是显而易见的:

  • JSON 留给人类。
  • 高 Token 效率的格式留给模型。

如果你正在向 LLM 发送大量的结构化数据,却还没开始考虑 Token 成本,那么你确实该考虑一下了。 这才是真正的核心启发。