TOON ↔ JSON
整形処理はすべてブラウザ内で完結します。データは送信されません
TOON(Token-Oriented Object Notation)は LLM のプロンプト向けのコンパクトな表記です。同じ形のオブジェクトの並びを 1 つの表として書き、キーはヘッダーに 1 度だけ現れ、行はデータだけになります。 ``` users[2]{id,name,role}: 1,Alice,admin 2,Bob,user ``` 同じデータの JSON は `[{"id":1,"name":"Alice","role":"admin"},…]` —— 各オブジェクトが 3 つのキーを毎回繰り返します。TOON が削るのはこの繰り返しと、波括弧・引用符です。 ⚠️ ここに出るのは文字数で、トークン数ではありません。 トークンを節約するのが TOON の売りなので、それが最も見たい数字でしょう —— しかし正確には出せません:トークン数はトークナイザー次第で(GPT・Claude・オープンな BPE でそれぞれ異なり、中国語やコードの分割も違います)、正確に出すには 1〜2 MB のトークナイザーが必要です。しかもそれは特定の 1 つの答えにすぎず、一般解として読まれてしまいます。そこで正確に数えられる部分を出します。⚠️ 文字数が 40% 減るのとトークンが 40% 減るのは別のことです。 ⚠️ 文字数の比較で JSON 側はコンパクトな表記(インデントなし)を使います。TOON が削るのは主にキー名と波括弧で、インデントはまさにそれを覆い隠すためです —— インデント付きと比べると「TOON はほとんど節約にならない」という誤った結論になります。
機能
- 双方向:JSON → TOON と TOON → JSON。明示的な指定も可能
- 区切り文字は 3 種:カンマ・タブ(最も省スペース)・パイプ
- ⚠️ 文字数の比較と変化率を表示。負の値は TOON のほうが短いことを意味します
- ⚠️ トークン数ではなく文字数であること、そしてなぜ出せないかを明記
- ⚠️ JSON 側はコンパクト表記で数えるため、インデントに惑わされません
- キーと値の組、ネストしたオブジェクト、配列、表形式の配列に対応
- ⚠️ 読み取り失敗時は実際に失敗する 2 つを挙げます:表の行数が宣言と合わない、引用符が閉じていない
- ⚠️ 「出力がある」ことは「正しく読めた」ことではないと明記 —— TOON の解析はかなり寛容です
- すべてブラウザー内で完結します
使い方
- JSON または TOON を貼り付けます。方向は自動判定されます
- 表が多いデータでは区切り文字を変えてみてください。タブが最も省スペースです
- 結果と文字数の比較を確認します。モデルに渡すならパーセントの行が要点です
よくある質問
- トークン数ではなく文字数を出すのはなぜですか?
- 正確に数えられないからです。そして、自信たっぷりの誤った数字は数字がないより悪いのです。トークン数はトークナイザー次第で、GPT の cl100k と o200k、Claude のもの、各種オープンな BPE 実装で分割が異なり、中国語・コード・JSON ではさらに差が広がります。正確に出すにはページに 1〜2 MB のトークナイザーを積む必要があり、しかもそれは特定の 1 つの答えにすぎないのに一般解として読まれます。そこで正確に数えられる部分、つまり文字数を出します。文字数はトークン数と強く相関しますが(TOON が削るのは主に繰り返しのキーと括弧です)、「文字数 40% 減」は「トークン 40% 減」ではありません。
- TOON はどこを節約するのですか?
- 2 か所です。1 つはキー名の繰り返し:同じ形のオブジェクトの並びでは、JSON は各オブジェクトで `"id"`・`"name"`・`"role"` を毎回書きますが、TOON はヘッダーに 1 度書くだけで、行はデータだけになります。もう 1 つは括弧と引用符:`{}`・`[]`・`""` は大きな配列では相当な量になります。したがってデータが規則的なほど節約になります —— 同じ項目が数十行続く表なら半分以上になりますが、キーが 3 つで配列のないオブジェクトでは JSON とほぼ同じか、むしろ長くなります。
- 表に `[2]` という数字があるのはなぜですか?
- あれは行数で、TOON は表が完全であることを確かめるために使います。飾りではありません —— デコーダーは宣言と実際に読んだ行数を比べ、合わなければエラーにします(「Expected 3 tabular rows, but got 1」)。手で TOON を編集するときは忘れやすく、1 行削って数字を直さないと次に読むときに失敗します。これはデコーダーが実際に拒否する数少ないケースの 1 つです。
- 「出力がある」が「正しく読めた」ではないとは?
- TOON のデコーダーはかなり寛容だからです。試した範囲では、エラーになるのは 2 つだけでした:表の行数が宣言と合わない場合と、引用符が閉じていない場合です。それ以外では、まったく意味不明な行も文字列として読み込まれます —— 「成功した」結果が得られますが、中身はあなたが思ったものではありません。したがって他所から TOON を貼り付けたときは、エラーの有無だけでなく出力された JSON を一度見てください。
- TOON はどんなときに使うべきですか?
- プロンプトに構造化データを入れるときです。JSON より短く、表が行ごとに揃うのでモデルにとっても読みやすい形です。使うべきでないのは:マシン間のデータ転送(そこは JSON の領域で、どの言語にも安定したパーサーがあります)、厳密な仕様が求められる場面(TOON はまだ新しく、参考実装が仕様です)、そして人が手で編集する設定ファイル(`[N]` の数を忘れやすく、警告も出ません)。
関連ツール
JSON 整形
整形JSON をブラウザ内で整形・圧縮・検証。折りたたみ可能なツリーで表示し、キーと値の検索、行番号とハイライト付きの編集、Python dict への変換にも対応。
XML ↔ JSON
整形XML と JSON を双方向に変換します。約束は 1 つ(属性は @名前、繰り返しタグは配列)に固定し、この変換で失われたものを項目ごとに報告します。
YAML 変換
整形YAML と JSON を双方向に変換します。複数ドキュメント、アンカーと別名、マージキーにも対応し、大きな整数も桁を失いません。エラーは行と列で示します。
JSON → コード
整形JSON サンプルから TypeScript interface、Go struct、Java class、Rust struct を生成。欠けたキーは任意に、型の衝突は共用型に。すべてブラウザ内で処理します。
SQL 整形
整形SQL をオンラインで整形:キーワードの大文字小文字を統一し、SELECT / FROM / WHERE などの句ごとに改行。圧縮は余分な空白とコメントを削除します。
JSON5 変換
整形JSON5 を標準 JSON に変換。コメント・引用符なしキー・シングルクォート・末尾カンマ・16進数・Infinity に対応し、エラーは行と列を示します。