Sowohl JSON als auch TOON repräsentieren strukturierte Daten. Beide sind textbasiert. Beide können Objekte, Arrays und verschachtelte Hierarchien beschreiben. Falls du also auf TOON gestoßen bist und dich gefragt hast, ob es nur eine weitere JSON-Alternative ist, die ein nicht existierendes Problem löst — das ist eine berechtigte Frage. Die Antwort lautet: Sie sind für völlig unterschiedliche Zwecke optimiert, und sobald man es nebeneinander sieht, wird die Wahl offensichtlich.

JSON ist die universelle Sprache des Datenaustauschs. Es ist seit über einem Jahrzehnt das Rückgrat von REST-APIs, wird nativ in jeder modernen Programmiersprache unterstützt und ist das Format, das man standardmäßig verwendet. TOON ist ein neueres Format mit einer engeren Mission: die Token-Nutzung zu minimieren, wenn strukturierte Daten an große Sprachmodelle übergeben werden. Gleiche zugrundeliegende Daten, radikal kleinerer Fußabdruck.

Was JSON auszeichnet

JSONs Stärke ist seine Allgegenwärtigkeit. Die RFC 8259 Spezifikation ist einfach genug, um auf wenige Seiten zu passen, weshalb jede Sprache von Python über Go bis Rust einen erstklassigen JSON-Parser in ihrer Standardbibliothek oder ihrem Ökosystem hat. Man muss nichts installieren. Man muss das Format nicht seinen Kollegen erklären. Und Werkzeuge — Formatter, Validatoren, Schema-Validatoren — sind universell verfügbar.

  • Universell unterstützt. Jede Sprache, jede Laufzeitumgebung, jeder Cloud-Dienst spricht JSON nativ.
  • Menschenlesbar. Schlüssel sind quoted Strings, Struktur wird explizit mit Klammern und Ausrufezeichen dargestellt.
  • Typisierte Primitiven. Zahlen, Booleans, Nullwerte, Strings, Arrays und Objekte — alle eindeutig repräsentiert.
  • Reiches Tooling. Linter, Formatter, JSON-Schema-Validatoren, JSONPath-Query-Engines — das Ökosystem ist riesig.
  • REST-API-Standard. Content-Type: application/json ist die Standarderwartung bei praktisch jeder HTTP-API.

Was TOON anders macht

TOON wurde mit einer spezifischen Einschränkung im Sinn entwickelt: LLM-Kontextfenster und Token-Kosten. Wenn man die OpenAI API oder einen anderen LLM-Anbieter aufruft, bezahlt man pro Token. Tokens sind keine Zeichen — sie sind ungefähr Wortfragmente, und JSONs strukturelle Interpunktion (Anführungszeichen, Doppelpunkte, Kommas, Klammern) verbraucht überraschend viele davon. Für tabellarische Daten insbesondere ist JSON verschwenderisch: Jede Zeile wiederholt jeden Schlüsselnamen.

TOON löst dies mit einer kompakten Notation. Für tabellarische Daten werden Schlüssel einmal in einem Header deklariert, und Zeilen sind einfache durch Kommas getrennte Werte. Für einzelne Objekte und Arrays verwendet es eine schlanke Inline-Syntax. Der OpenAI-Tokenizer ist ein nützliches Werkzeug, um den Unterschied in der Praxis zu sehen — füge dieselben Daten in beiden Formaten ein und vergleiche die Token-Anzahl direkt.

Nebeneinander: 10-Zeilen-Datensatz

Hier ist eine Produkttabelle mit 10 Zeilen in JSON — die Art von Ding, das man einem LLM übergeben könnte, um es nach Preisen zu analysieren oder Artikel zu kategorisieren:

json
[
  {"id": 1,  "name": "Wireless Mouse",      "category": "Electronics", "price": 29.99, "inStock": true},
  {"id": 2,  "name": "USB-C Hub",           "category": "Electronics", "price": 49.99, "inStock": true},
  {"id": 3,  "name": "Mechanical Keyboard", "category": "Electronics", "price": 89.99, "inStock": false},
  {"id": 4,  "name": "Monitor Stand",       "category": "Furniture",   "price": 39.99, "inStock": true},
  {"id": 5,  "name": "Webcam HD",           "category": "Electronics", "price": 69.99, "inStock": true},
  {"id": 6,  "name": "Desk Mat",            "category": "Accessories", "price": 19.99, "inStock": true},
  {"id": 7,  "name": "Laptop Stand",        "category": "Furniture",   "price": 34.99, "inStock": false},
  {"id": 8,  "name": "LED Desk Lamp",       "category": "Furniture",   "price": 44.99, "inStock": true},
  {"id": 9,  "name": "Cable Organiser",     "category": "Accessories", "price": 14.99, "inStock": true},
  {"id": 10, "name": "Headphone Hook",      "category": "Accessories", "price": 12.99, "inStock": false}
]

Jetzt dieselben Daten in TOON. Schlüssel werden einmal im Header deklariert — Zeilen enthalten nur Werte:

text
products[10]{id,name,category,price,inStock}:
  1,Wireless Mouse,Electronics,29.99,true
  2,USB-C Hub,Electronics,49.99,true
  3,Mechanical Keyboard,Electronics,89.99,false
  4,Monitor Stand,Furniture,39.99,true
  5,Webcam HD,Electronics,69.99,true
  6,Desk Mat,Accessories,19.99,true
  7,Laptop Stand,Furniture,34.99,false
  8,LED Desk Lamp,Furniture,44.99,true
  9,Cable Organiser,Accessories,14.99,true
  10,Headphone Hook,Accessories,12.99,false
Token-Einsparungen in der Praxis: Die obige JSON-Version kommt laut OpenAI-Tokenizer auf ungefähr 420 Tokens. Die TOON-Version ist ungefähr 195 Tokens — weniger als die Hälfte. Bei großem Maßstab (Tausende von API-Aufrufen pro Tag oder Datensätze mit Hunderten von Zeilen) wird dieser Unterschied zu echtem Geld.

TOON in JavaScript / TypeScript verwenden

Das @toon-format/toon npm-Paket übernimmt Kodierung und Dekodierung. Einmal installiert, ist die API unkompliziert:

bash
npm install @toon-format/toon
ts
import { encode, decode } from '@toon-format/toon';

const products = [
  { id: 1, name: 'Wireless Mouse', category: 'Electronics', price: 29.99, inStock: true },
  { id: 2, name: 'USB-C Hub',      category: 'Electronics', price: 49.99, inStock: true },
  // ...more rows
];

// Encode to TOON before sending to an LLM
const toonString = encode(products);
// products[2]{id,name,category,price,inStock}:
//   1,Wireless Mouse,Electronics,29.99,true
//   2,USB-C Hub,Electronics,49.99,true

// Decode TOON back to a plain JS array when the LLM returns it
const decoded = decode(toonString);
console.log(decoded[0].name); // "Wireless Mouse"

Man kann auch ein einzelnes Objekt inline kodieren. TOONs Objektnotation verwendet geschweifte Klammern ohne Anführungszeichen bei Schlüsseln, und die Array-Notation sind einfach durch Kommas getrennte Werte in eckigen Klammern:

text
// TOON object
{name:Alice,age:30,role:admin}

// TOON array
[1,2,3,4,5]

Wann TOON verwendet werden sollte

  • LLM-Prompts mit strukturierten Daten. Eine Tabelle, eine Liste von Datensätzen oder einen Produktkatalog an einen GPT-4 / Claude / Gemini-Aufruf übergeben. Die Token-Einsparungen reduzieren direkt deine API-Rechnung.
  • LLM-Ausgabe-Parsing. Wenn man ein LLM anweist, in TOON zu antworten, sind die Antworten kürzer und günstiger bei Ein- und Ausgabe-Tokens.
  • Tabellarische Daten speziell. TOONs Struktur mit Header-einmal-dann-Zeilen ist dramatisch kompakter als JSON für alles Tabellenförmige.
  • Batch-Verarbeitungs-Pipelines. Täglich Tausende von Datensätzen durch ein LLM verarbeiten? Selbst eine 40%ige Token-Reduktion summiert sich schnell.
  • Kontextfenster-Druck. Wenn man an das Kontextlimit eines Modells stößt, erlaubt TOON mehr Daten im selben Fenster unterzubringen.

Wann bei JSON bleiben

  • REST-APIs. Jeder HTTP-Client, jedes Server-Framework, jedes API-Gateway spricht JSON. Diese Konvention sollte nicht gebrochen werden.
  • Konfigurationsdateien. package.json, tsconfig.json, settings.json — JSON ist der Standard für Config in den meisten Ökosystemen.
  • Datenbankspeicherung. PostgreSQLs jsonb, MongoDB-Dokumente, DynamoDB — diese sind JSON-nativ. TOON gehört hier nicht hin.
  • Inter-Service-Kommunikation. Wenn zwei Dienste miteinander kommunizieren, JSON verwenden. Das verstehen deine Logging-, Tracing- und Monitoring-Tools.
  • Öffentliche APIs. Wenn externe Entwickler deine API nutzen, ist JSON der erwartete Vertrag. TOON ist eine interne Optimierung, kein öffentliches Schnittstellenformat.
  • Browser-natives Parsing. JSON.parse() ist in jeden Browser eingebaut. TOON erfordert eine Bibliothek.

Entscheidungshilfe

Eine schnelle Checkliste zur Klärung der Frage:

  • Gehen die Daten in einen LLM-Prompt? TOON verwenden.
  • Soll das LLM strukturierte Daten zurückgeben? TOON verwenden.
  • Sind die Daten tabellarisch (gleiche Schlüssel über viele Zeilen)? TOON ernsthaft in Betracht ziehen.
  • Ist dies eine REST-API-Anfrage oder -Antwort? JSON verwenden.
  • Ist es eine Konfigurationsdatei? JSON (oder YAML) verwenden.
  • Wird es in einer Datenbank gespeichert? JSON verwenden.
  • Werden diese Daten von nicht-LLM-Werkzeugen verarbeitet? JSON verwenden.
  • Unsicher, ob Token-Kosten für den Anwendungsfall relevant sind? Mit JSON beginnen, später optimieren.

Nützliche Werkzeuge

Wenn du mit beiden Formaten arbeitest, sparen diese Werkzeuge Zeit. Verwende den JSON-zu-TOON-Konverter, um bestehende JSON-Daten in eine kompakte TOON-Darstellung umzuwandeln, die für LLM-Eingabe bereit ist. Der TOON-zu-JSON-Konverter geht in die andere Richtung — nützlich, wenn ein LLM TOON zurückgibt und man das Ergebnis in ein JSON-natives Downstream-System einspeisen muss. Der TOON Formatter bereinigt und validiert TOON-Strings, und der JSON Formatter bleibt die erste Wahl zum Verschönern von rohen JSON-Blöcken.

Zusammenfassung

JSON und TOON sind keine Konkurrenten im klassischen Sinne — sie zielen auf verschiedene Teile deines Stacks ab. JSON besitzt die API-Schicht, Konfigurationsdateien und Datenspeicherung. TOON besitzt die LLM-Schicht, wo Token-Anzahl Geld bedeutet und Kontextfenster-Platz wertvoll ist. Die gute Nachricht ist, dass man beide im selben Projekt ohne Reibung verwenden kann: Daten als JSON speichern und übertragen, unmittelbar vor jedem LLM-Aufruf zu TOON kodieren, und auf dem Rückweg zu JSON oder einem nativen Objekt dekodieren. Sobald dieses Muster eingerichtet ist, sind die Token-Einsparungen automatisch.