TOON(Token-Oriented Object Notation,面向令牌的对象表示法) 是一种专为大模型(LLM) 设计的 JSON 压缩型数据结构。它不是新的数据模型,而是对 JSON 数据模型的无损、紧凑重编码,专门优化 LLM 的 token 消耗和解析可靠性。
它融合了 YAML 的缩进式嵌套 + CSV 的表格布局,特别适合同构对象数组(如用户列表、产品目录、日志记录等),在这些场景下可将 token 数减少 30–60%,同时提升模型的数据检索准确率(基准测试中 TOON 约 73.9–74% vs JSON 的 69.7–70%)。
为什么 JSON 在 LLM 中“浪费” token?
JSON 的 {}、[]、""、重复的 key(如每个对象都写一次 "id":)会被 tokenizer 切成很多小 token。
TOON 把这些“噪声”去掉:
- 键名只声明一次(header)
- 用缩进表示嵌套
- 用
[N]{field1,field2,...}:显式标注数组长度和结构(给模型“护栏”,减少幻觉)
经典对比示例
JSON(85 tokens 示例):
{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "editor" },
{ "id": 3, "name": "Eve", "role": "viewer" }
]
}
TOON(33 tokens,节省约 61%):
users[3]{id,name,role}:
1,Alice,admin
2,Bob,editor
3,Eve,viewer
另一个真实场景示例(产品列表):
JSON:
{
"products": [
{ "id": 1, "name": "Laptop", "price": 3999.90 },
{ "id": 2, "name": "Mouse", "price": 149.90 },
{ "id": 3, "name": "Headset", "price": 499.00 }
]
}
TOON:
products[3]{id,name,price}:
1,Laptop,3999.90
2,Mouse,149.90
3,Headset,499.00
更复杂的嵌套示例(官方 GitHub 示例)
JSON:
{
"context": {
"task": "Our favorite hikes together",
"location": "Boulder",
"season": "spring_2025"
},
"friends": ["ana", "luis", "sam"],
"hikes": [ { "id":1, "name":"Blue Lake Trail", ... }, ... ]
}
TOON:
context:
task: Our favorite hikes together
location: Boulder
season: spring_2025
friends[3]: ana,luis,sam
hikes[3]{id,name,distanceKm,elevationGain,companion,wasSunny}:
1,Blue Lake Trail,7.5,320,ana,true
2,Ridge Overlook,9.2,540,luis,false
3,Wildflower Loop,5.1,180,sam,true
Token 节省基准(来自多个独立测试)
- 简单对象:节省 ~40%
- 同构数组(产品/用户/订单):节省 50–61%
- 混合结构大数据集:平均节省 39–42%
- 实际案例:500 行客户表,JSON 花 $1940,TOON 只需 $760(同一模型、同一答案)
适用场景 & 边界
强烈推荐用 TOON 的情况:
- 大量同构记录(RAG 检索结果、工具输出、日志、数据库查询结果)
- 需要降低 API 成本或扩大有效上下文窗口
- 希望模型解析更准(显式 [N] 和 {header} 像 schema 一样指导注意力)
建议继续用 JSON 的情况:
- 深度嵌套、结构不规则的数据
- 作为通用 API/存储格式(生态最成熟)
- 对延迟极敏感的本地小模型(解析开销可能抵消 token 收益)
纯表格数据:CSV 比 TOON 还小一点,但 TOON 多了结构标注,对 LLM 更友好。
如何使用 TOON?
官方仓库(22k+ stars,已有 TypeScript、Python、Go、Rust 等多语言实现):
- GitHub: https://github.com/toon-format/toon
- 在线 Playground: https://toonformat.dev/playground
- CLI 一键转换:
npx @toon-format/cli input.json > output.toon
在提示词里直接把 JSON 转成 TOON 喂给模型即可,模型能无缝理解(甚至准确率更高)。
一句话总结:
TOON 不是要取代 JSON,而是 LLM 时代的“提示词压缩协议” —— 在结构化数据喂模型的环节,把每一分 token 都用在刀刃上。
需要我给你一个具体的 JSON → TOON 转换工具代码(Python/JS)、更多基准数据,还是帮你把某个数据集转成 TOON 格式演示?随时说!🚀