Format-Dokumentation liebt Spielzeugbeispiele — drei Zeilen, falsche Namen, fünf Spalten. Das ist in Ordnung, um die Syntax zu lernen, sagt aber nicht, ob ein Format die Formen verarbeitet, mit denen man tatsächlich bei der Arbeit zu tun hat. Dieser Artikel überspringt die Spielzeuge. Im Folgenden sind die Datenmuster, die in der realen Backend-Entwicklung ständig auftauchen — Produktkataloge, Audit-Logs, Metriktabellen, Konfigurationsobjekte, Finanztransaktionen — in JSON und TOON nebeneinander gezeigt, damit man genau sehen kann, was man einspart und wo TOON seinen Platz hat. Alle Daten sind realistisch; kein foo, bar oder Platzhalternamen weit und breit. Für Hintergrundinformationen zum Format selbst, sieh den TOON Syntax-Leitfaden.

E-Commerce-Produktkatalog

Ein Produkt-Array ist wahrscheinlich das Einzelne, das Entwickler am häufigsten an ein LLM senden — "klassifiziere diese Artikel", "finde den günstigsten in jeder Kategorie", "markiere alles, was nicht vorrätig ist und über 50€ kostet". Hier ist ein realistischer Katalogausschnitt zuerst in JSON:

json
[
  {"id":"PRD-1041","name":"Logitech MX Master 3S","sku":"LOG-MX3S-GRY","price":99.99,"inStock":true,"category":"Peripherals"},
  {"id":"PRD-1042","name":"Samsung 970 EVO Plus 1TB","sku":"SAM-970P-1TB","price":89.99,"inStock":true,"category":"Storage"},
  {"id":"PRD-1043","name":"Keychron K2 Pro","sku":"KEY-K2P-BLK","price":119.99,"inStock":false,"category":"Peripherals"},
  {"id":"PRD-1044","name":"Elgato Stream Deck MK.2","sku":"ELG-SD-MK2","price":149.99,"inStock":true,"category":"Streaming"},
  {"id":"PRD-1045","name":"WD Blue 2TB HDD","sku":"WD-BLU-2TB","price":54.99,"inStock":true,"category":"Storage"},
  {"id":"PRD-1046","name":"Razer DeathAdder V3","sku":"RZR-DAV3-BLK","price":69.99,"inStock":true,"category":"Peripherals"},
  {"id":"PRD-1047","name":"Focusrite Scarlett Solo","sku":"FOC-SC-SOLO","price":119.99,"inStock":false,"category":"Audio"}
]

Jetzt derselbe Katalog in TOON. Spalten-Header werden einmal deklariert; jede Zeile besteht nur aus Werten:

text
products[7]{id,name,sku,price,inStock,category}:
  PRD-1041,Logitech MX Master 3S,LOG-MX3S-GRY,99.99,true,Peripherals
  PRD-1042,Samsung 970 EVO Plus 1TB,SAM-970P-1TB,89.99,true,Storage
  PRD-1043,Keychron K2 Pro,KEY-K2P-BLK,119.99,false,Peripherals
  PRD-1044,Elgato Stream Deck MK.2,ELG-SD-MK2,149.99,true,Streaming
  PRD-1045,WD Blue 2TB HDD,WD-BLU-2TB,54.99,true,Storage
  PRD-1046,Razer DeathAdder V3,RZR-DAV3-BLK,69.99,true,Peripherals
  PRD-1047,Focusrite Scarlett Solo,FOC-SC-SOLO,119.99,false,Audio
Die sechs Spalten-Header in TOON werden genau einmal geschrieben. In JSON wiederholen sie sich in jeder Zeile. Ab Zeile 3 hat der Header sich durch Token-Einsparungen bereits amortisiert — und bei einem 200-Zeilen-Katalog ist der Unterschied dramatisch. Verwende den OpenAI-Tokenizer, um die Einsparungen für eigene Daten zu überprüfen.

Benutzeraktivität / Audit-Log

Audit-Logs sind genau die Art von Daten, die man einem LLM mit einem Prompt wie "fasse zusammen, was dieser Benutzer in der letzten Stunde getan hat" oder "markiere verdächtige Zugriffsmuster" übergeben würde. Sie sind hochvolumig, repetitiv, und die Spaltennamen sind in jeder Zeile identisch. Audit-Trails sind auch in der Regel das Erste, das das Kontextfenster sprengt, wenn man sie als JSON einfügt. Hier ist ein realistisches 9-Zeilen-Log in TOON:

text
auditLog[9]{userId,action,resourceId,resourceType,timestamp,ip}:
  U-8821,LOGIN,,session,2024-11-14T08:02:11Z,203.0.113.47
  U-8821,VIEW,DOC-4490,document,2024-11-14T08:03:44Z,203.0.113.47
  U-8821,DOWNLOAD,DOC-4490,document,2024-11-14T08:03:51Z,203.0.113.47
  U-8821,VIEW,DOC-4491,document,2024-11-14T08:05:02Z,203.0.113.47
  U-8821,EDIT,DOC-4491,document,2024-11-14T08:07:39Z,203.0.113.47
  U-8821,SHARE,DOC-4491,document,2024-11-14T08:08:12Z,203.0.113.47
  U-8821,VIEW,USR-0055,user_profile,2024-11-14T08:09:58Z,203.0.113.47
  U-8821,VIEW,USR-0056,user_profile,2024-11-14T08:10:03Z,203.0.113.47
  U-8821,LOGOUT,,session,2024-11-14T08:11:22Z,203.0.113.47

Das entsprechende JSON würde "userId", "action", "resourceId", "resourceType", "timestamp" und "ip" in allen neun Zeilen wiederholen — 54 Schlüsselwiederholungen für sechs Feldnamen. In TOON erscheinen sie genau einmal. Bei Audit-Logs mit Hunderten von Einträgen ist das der Unterschied zwischen dem Einpassen der Daten in den Prompt und dem Scheitern daran.

API-Rate-Limit / Metrikdaten

Betriebsmetriken — Latenz-Perzentile, Fehlerraten, Durchsatz — sind eine weitere natürliche Anwendung für TOON. Die Daten sind zahlenlastig und perfekt tabellarisch. Man könnte dies an ein LLM senden mit der Frage "welche Endpunkte haben p99-Latenz über 500ms?" oder "wo steigt die Fehlerrate an?" Das ist die Datenform, die man typischerweise aus einer Node.js-Metriken-Pipeline oder einem Prometheus-Scrape bekommt:

text
apiMetrics[8]{endpoint,method,p50ms,p99ms,errorRate,callsPerDay}:
  /api/v2/products,GET,42,118,0.002,84200
  /api/v2/products/:id,GET,38,95,0.001,31500
  /api/v2/orders,POST,210,880,0.015,4800
  /api/v2/orders/:id,GET,55,201,0.003,19200
  /api/v2/cart,PUT,95,430,0.008,22100
  /api/v2/search,GET,310,1240,0.021,61000
  /api/v2/users/:id,GET,29,88,0.001,9700
  /api/v2/checkout,POST,540,2100,0.034,3200

Das LLM kann sofort Fragen zu dieser Tabelle beantworten, ohne Kontext-Overhead. Beachte, dass /api/v2/search und /api/v2/checkout beide mit hohem p99 und erhöhten Fehlerraten herausstechen — genau die Art von Muster, die ein LLM sofort identifizieren kann, wenn die Daten klar präsentiert werden.

Verschachteltes Konfigurationsobjekt

TOON verarbeitet mehr als tabellarische Daten. Für strukturierte Objekte — die Art von Ding, das man in der Laufzeitkonfiguration einer App findet — verwendet TOON eine Inline-Objektnotation mit verschachtelter Struktur. Denke daran als Gegenstück zu Serialisierungsformaten wie TOML oder YAML, aber schlanker. Hier ist eine realistische App-Konfiguration mit Server-Einstellungen, Datenbankeinstellungen und Feature-Flags:

json
{
  "server": {
    "host": "0.0.0.0",
    "port": 8080,
    "tlsEnabled": true,
    "requestTimeoutMs": 30000
  },
  "database": {
    "host": "db.internal.example.com",
    "port": 5432,
    "name": "commerce_prod",
    "poolSize": 20,
    "sslRequired": true
  },
  "features": {
    "newCheckoutFlow": true,
    "recommendationEngine": false,
    "darkMode": true,
    "betaDashboard": false
  }
}

Dieselbe Konfiguration in TOON-Objektnotation — Schlüssel sind ohne Anführungszeichen, Verschachtelung verwendet Inline-Klammern:

text
{
  server:{host:0.0.0.0,port:8080,tlsEnabled:true,requestTimeoutMs:30000},
  database:{host:db.internal.example.com,port:5432,name:commerce_prod,poolSize:20,sslRequired:true},
  features:{newCheckoutFlow:true,recommendationEngine:false,darkMode:true,betaDashboard:false}
}
TOONs Objektsyntax setzt Schlüssel nicht in Anführungszeichen, es sei denn, ein Wert enthält ein Komma oder einen Doppelpunkt. Im obigen database-Block ist host:db.internal.example.com so in Ordnung — keine Anführungszeichen nötig, da der Wert weder ein Komma noch einen Doppelpunkt enthält. Wenn ein Wert ein Komma oder einen Doppelpunkt enthält, in doppelte Anführungszeichen setzen: dsn:"host:5432,sslmode=require".

Finanztransaktionen

Finanzdaten sind ein weiterer hochwertiger LLM-Anwendungsfall: Betrugserkennungshinweise, Abgleichsprüfungen, Kategorisierung. Die Mischung aus String-IDs, numerischen Beträgen, Währungscodes, Status-Enums und Zeitstempeln passt sauber in TOONs tabellarisches Format. Hier ist ein realistischer Transaktionsausschnitt:

text
transactions[9]{txId,amount,currency,from,to,status,timestamp}:
  TXN-88201,1250.00,GBP,ACC-1041,ACC-2209,settled,2024-11-14T09:15:00Z
  TXN-88202,89.99,USD,ACC-3301,ACC-0047,settled,2024-11-14T09:16:34Z
  TXN-88203,4500.00,EUR,ACC-2001,ACC-5512,pending,2024-11-14T09:18:02Z
  TXN-88204,22.50,USD,ACC-0099,ACC-3301,settled,2024-11-14T09:21:47Z
  TXN-88205,750.00,GBP,ACC-5512,ACC-1041,failed,2024-11-14T09:25:10Z
  TXN-88206,12000.00,USD,ACC-7700,ACC-2001,pending,2024-11-14T09:28:55Z
  TXN-88207,310.00,EUR,ACC-1041,ACC-0099,settled,2024-11-14T09:31:22Z
  TXN-88208,55.00,USD,ACC-3301,ACC-7700,settled,2024-11-14T09:33:40Z
  TXN-88209,8900.00,GBP,ACC-2209,ACC-5512,flagged,2024-11-14T09:37:15Z

Füge dies in einen Prompt zusammen mit "markiere alle Transaktionen über £5.000 oder mit Status flagged oder failed" ein, und das Modell antwortet in Sekunden. Die TOON-Darstellung ist kompakt genug, dass man problemlos mehrere Hundert Zeilen in einem einzigen Prompt unterbringen kann, ohne Kontextlimits der meisten Modelle zu erreichen.

Tabellarische und Objektdaten in einem Dokument kombinieren

Hier ist etwas, das weder JSON noch CSV sauber handhabt: ein Dokument, das sowohl einen Metadaten-Header (ein einzelnes Konfigurationsobjekt) als auch eine Datentabelle im selben Payload hat. Denke an einen Bericht mit einem Kontextblock oben — wer ihn erstellt hat, welchen Zeitraum er abdeckt, welche Filter angewendet wurden — gefolgt von den eigentlichen Datenzeilen. In JSON müsste man alles in ein Umschlagsobjekt mit einem "meta"-Schlüssel und einem "rows"-Schlüssel verpacken, was eine weitere Verschachtelungsebene hinzufügt. CSV kann es gar nicht. TOON behandelt es nativ:

text
{report:weekly_sales,generatedAt:2024-11-14T10:00:00Z,region:EMEA,currency:EUR,generatedBy:analytics-service}

salesByRep[6]{repId,repName,deals,revenue,avgDealSize,quota}:
  REP-101,Marta Kowalski,14,84200.00,6014.28,75000
  REP-102,James Okafor,11,61500.00,5590.90,75000
  REP-103,Yuki Tanaka,18,102400.00,5688.88,90000
  REP-104,Sofia Andersen,9,47800.00,5311.11,75000
  REP-105,Liam Byrne,16,93100.00,5818.75,90000
  REP-106,Priya Nair,21,118600.00,5647.61,100000

Die erste Zeile ist ein TOON-Objekt — die Berichtsmetadaten. Die Leerzeile trennt sie vom darauf folgenden tabellarischen Abschnitt. Ein einziger decode()-Aufruf von @toon-format/toon gibt beides zurück. Man kann dieses gesamte Dokument mit einer Frage wie "welche Vertreter sind auf dem Weg, ihre Quote zu erreichen?" an ein LLM senden, und es hat alles, was es braucht: den Berichtskontext und die Daten in einem kompakten Payload.

Dieses gemischte Format ist besonders leistungsfähig für LLM-Pipelines. Anstatt einen JSON-Umschlag mit verschachtelten Schlüsseln zu erstellen, schreibt man ein flaches Header-Objekt + eine benannte Tabelle. Das Modell liest es natürlich, und der Code zur Generierung ist trivial. Verwende den JSON-zu-TOON-Konverter, um vorhandene JSON-Payloads zu transformieren, oder den TOON Formatter, um handgeschriebenes TOON zu bereinigen und zu validieren.

Das npm-Paket verwenden

Alle diese Beispiele können programmatisch kodiert und dekodiert werden. Das @toon-format/toon-Paket ist die Referenzimplementierung. In jedem Node.js- oder Browser-Projekt installieren:

bash
npm install @toon-format/toon

Dann die Daten vor dem Senden an eine LLM-API kodieren und die Antwort auf dem Rückweg dekodieren:

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

const transactions = [
  { txId: 'TXN-88201', amount: 1250.00, currency: 'GBP', from: 'ACC-1041', to: 'ACC-2209', status: 'settled', timestamp: '2024-11-14T09:15:00Z' },
  { txId: 'TXN-88202', amount: 89.99,   currency: 'USD', from: 'ACC-3301', to: 'ACC-0047', status: 'settled', timestamp: '2024-11-14T09:16:34Z' },
  // ...more rows
];

// Compact TOON string — send this to your LLM prompt
const toonPayload = encode(transactions);

// When the LLM returns TOON, decode back to a JS array
const decoded = decode(toonPayload);
console.log(decoded[0].status); // "settled"

Zusammenfassung

Die obigen Muster — Produktkataloge, Audit-Logs, Metriktabellen, Konfigurationsobjekte, Finanzdaten, gemischte Header+Tabellen-Dokumente — decken die überwiegende Mehrheit strukturierter Daten ab, die Entwickler tatsächlich an LLMs senden. TOON verarbeitet alle gut, und die Token-Einsparungen sind in jedem Fall erheblich. Die Kernregel ist einfach: JSON wiederholt Schlüsselnamen in jeder Zeile; TOON nicht. Für tabellarische Datenserialisierung, die in ein LLM-Kontextfenster geht, ist diese Wiederholung reiner Overhead.

Um vorhandenes JSON in TOON zu konvertieren, verwende den JSON-zu-TOON-Konverter. Um nach einer LLM-TOON-Rückgabe in die andere Richtung zu gehen, verwende den TOON-zu-JSON-Konverter. Der TOON Formatter bereinigt und validiert TOON-Strings, und der TOON Validator erkennt Syntaxfehler, bevor sie die Pipeline erreichen. Das npm-Paket @toon-format/toon übernimmt Kodierung und Dekodierung in zwei Codezeilen — alle obigen Beispiele funktionieren direkt.