TOON 与 JSON 互转
格式化所有处理都在浏览器本地完成,数据不上传服务器
TOON(Token-Oriented Object Notation)是给大模型提示词用的紧凑写法:一组结构相同的对象被写成一张表,键名只在表头出现一次,行里全是数据。 ``` users[2]{id,name,role}: 1,Alice,admin 2,Bob,user ``` 同一份数据的 JSON 是 `[{"id":1,"name":"Alice","role":"admin"},…]` —— 每个对象都把三个键名重复一遍。TOON 省下来的正是这些重复,以及括号与引号。 ⚠️ 这里给的是字符数,不是 token 数。 TOON 的卖点就是省 token,所以那多半是你最想看的数字 —— 但算不准:token 数取决于具体分词器(GPT、Claude、开源的 BPE 各不相同,中文与代码的切分还不一样),要算得装一个 1–2 MB 的分词器,而那只算得出某一个分词器的答案,会被当成通用结论。所以给能算准的那部分。⚠️ 省了 40% 的字符与省了 40% 的 token 不是一回事。 ⚠️ 字符数对照里 JSON 那一侧用的是紧凑写法(没有缩进):TOON 省下来的主要是键名与括号,而那些在缩进过的 JSON 里被空白掩盖了 —— 拿带缩进的 JSON 去比会得出「TOON 没省多少」的错误结论。
功能
- 两个方向:JSON → TOON 与 TOON → JSON,也可以手动指定
- 三种分隔符:逗号、制表符(最省)、竖线
- ⚠️ 给出字符数对照与变化百分比,负数表示 TOON 更短
- ⚠️ 明确说明给的是字符数而不是 token 数,以及为什么算不准
- ⚠️ 字符数对照里 JSON 用紧凑写法,避免被缩进误导
- 键值对、嵌套对象、数组、表格化数组都能转
- ⚠️ TOON 读不动时指出真实的两种原因:表格行数与声明对不上、引号没闭合
- ⚠️ 提醒「有输出」不等于「读对了」—— TOON 的解析相当宽松
- 全部在浏览器本地完成
使用方法
- 把 JSON 或 TOON 粘进去,方向自动识别
- 表格多的话可以换分隔符,制表符最省字符
- 看结果与字符数对照;要发给模型的话,看的是百分比那一行
常见问题
- 为什么只给字符数,不给 token 数?
- 因为算不准,而一个看起来很权威的错数字比没有数字更糟。token 数取决于具体分词器:GPT 的 cl100k 与 o200k、Claude 的、以及各种开源的 BPE 实现,切分结果都不同;中文、代码、JSON 这些内容在不同分词器下的差异更大。要算准得在页面里装一个 1–2 MB 的分词器,而它算出来的也只是某一个分词器的答案 —— 用户会把它当成通用的。所以给能算准的那一部分:字符数。字符数确实与 token 数高度相关(TOON 省下来的主要就是重复的键名与括号),但「省了 40% 的字符」不等于「省了 40% 的 token」。
- TOON 到底省在哪里?
- 两处。一是重复的键名:一组结构相同的对象,JSON 里每个对象都要把 `"id"`、`"name"`、`"role"` 各写一遍,而 TOON 只在表头写一次,剩下的行全是数据。二是括号与引号:JSON 的 `{}`、`[]`、`""` 在大数组里占的量很可观。所以越规整的数据省得越多 —— 十个字段相同、几十行的表格能省一半以上;而一个只有三五个键、没有数组的对象,TOON 与 JSON 差不多长,甚至更长。
- 为什么表格要有 `[2]` 这个数字?
- 那是行数,TOON 用它来确认表格确实完整。它不是装饰 —— 解析器会拿它和实际读到的行数比对,对不上就报错(「Expected 3 tabular rows, but got 1」)。这一点在手工编辑 TOON 时很容易忘:删掉一行忘了改那个数字,读的时候就会报错。这是 TOON 解析器实际会拒绝的少数情况之一。
- 为什么说「有输出」不等于「读对了」?
- 因为 TOON 的解析相当宽松。实测下来它只会为两种情况报错:表格的行数与声明的数字对不上,以及引号没有闭合。除此之外,一行完全看不懂的文字会被当成一个字符串读进去 —— 你得到的是一份「成功」的结果,内容却不是你以为的。所以从别处复制 TOON 进来时,先扫一眼输出的 JSON 对不对,不要只看有没有报错。
- 什么时候该用 TOON?
- 往提示词里塞结构化数据的时候。它比 JSON 短,而且因为表格是逐行对齐的,模型读起来也不差。不该用的场合:机器之间传数据(那是 JSON 的地盘,所有语言的解析器都有且都稳)、需要严格规范的地方(TOON 还年轻,参考实现就是规范)、以及需要人反复手工编辑的配置文件(那个 `[N]` 计数容易忘改,而且没有工具会提醒你)。
相关工具
JSON 格式化
格式化在线 JSON 格式化与校验工具:树形折叠浏览、搜索键值、逐节点改值与删除、语法错误定位到具体行列,输入框带行号与高亮。全部在浏览器本地完成。
XML 与 JSON 互转
格式化XML 与 JSON 双向互转,用一套固定的约定(属性写作 @名字、重复标签变数组),并逐条报出这次转换丢了什么。全部在浏览器本地完成。
YAML 转换
格式化YAML 与 JSON 双向互转:多文档、锚点别名与合并键都按规范处理,大整数不丢精度,解析错误指出行列位置。全部在浏览器本地完成。
JSON 转代码
格式化把 JSON 样本转成 TypeScript interface、Go struct、Java class 或 Rust struct:不齐的键标成可选、类型冲突退化为联合类型。全程在浏览器本地生成。
SQL 格式化
格式化在线 SQL 格式化:关键字统一大小写、按 SELECT / FROM / WHERE 等子句换行缩进、子查询逐层展开,压缩模式去掉多余空白与注释。语句不上传服务器。
JSON5 转换
格式化把 JSON5 解析成标准 JSON:注释、无引号键、单引号、尾逗号、十六进制、Infinity 都支持,错误指出行列。全部在浏览器本地完成。