piapia123
ja

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 の解析はかなり寛容です
  • すべてブラウザー内で完結します

使い方

  1. JSON または TOON を貼り付けます。方向は自動判定されます
  2. 表が多いデータでは区切り文字を変えてみてください。タブが最も省スペースです
  3. 結果と文字数の比較を確認します。モデルに渡すならパーセントの行が要点です

よくある質問

トークン数ではなく文字数を出すのはなぜですか?
正確に数えられないからです。そして、自信たっぷりの誤った数字は数字がないより悪いのです。トークン数はトークナイザー次第で、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]` の数を忘れやすく、警告も出ません)。

関連ツール