Formatdokumentation elsker legetøjseksempler — tre rækker, falske navne, fem kolonner. Det er fint for at lære syntaksen, men det fortæller dig ikke, om et format håndterer de former, du faktisk beskæftiger dig med på arbejdet. Denne artikel springer over legetøjet. Nedenfor er de datamønstre, der konstant dukker op i reel backend-udvikling — produktkataloger, revisionslogge, metriktabeller, konfigurationsobjekter, finansielle transaktioner — vist i både JSON og TOON side om side, så du kan se præcis, hvad du sparer, og hvor TOON tjener sin plads. Alle data er realistiske; ingen foo, bar eller pladsholder-navne i sigte. For baggrund om selve formatet, se TOON-syntaksguiden.
E-handels produktkatalog
Et produktarray er sandsynligvis det mest almindelige, udviklere sender til en LLM — "klassificér disse elementer", "find den billigste i hver kategori", "markér alt, der er udsolgt, med en pris over $50". Her er et realistisk katalog-udsnit i JSON først:
[
{"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"}
]Nu det samme katalog i TOON. Kolonnehoveder erklæres én gang; hver række er blot værdier:
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,AudioBrugeraktivitet / revisionslog
Revisionslogge er præcis den slags data, du ville sende til en LLM med en prompt som "opsummér, hvad denne bruger gjorde i den sidste time" eller "markér mistænkelige adgangsmønstre". De er høj-volume, repetitive, og kolonnenavnene er identiske på hver række. Revisionsspor er også det første, der sprænger dit kontekstvindue, når du indsætter dem som JSON. Her er en realistisk 9-rækkers log i TOON:
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.47Den tilsvarende JSON ville gentage "userId", "action", "resourceId", "resourceType", "timestamp" og "ip" på alle ni rækker — 54 nøglegentagelser for seks feltnavne. I TOON fremgår de præcis én gang. For revisionslogge med hundredvis af poster er det forskellen mellem at passe dataene i din prompt og ikke at gøre det.
API-hastighedsbegrænsning / metriktdata
Driftsmålinger — latens-percentiler, fejlrater, gennemstrømning — er en anden naturlig pasform til TOON. Dataene er taltunge og perfekt tabelformede. Du kan sende dette til en LLM for at spørge "hvilke endepunkter har p99-latens over 500ms?" eller "hvor stiger fejlraten?" Dette er formen på data, du typisk ville se komme ud af en Node.js-målingsrørledning eller en Prometheus-skrab:
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,3200LLM'en kan straks besvare spørgsmål om denne tabel uden nogen kontekst-overhead. Bemærk, at /api/v2/search og /api/v2/checkout begge skiller sig ud med høj p99 og forhøjede fejlrater — præcis den slags mønster, som en LLM kan identificere øjeblikkeligt når du præsenterer dataene klart.
Indlejret konfigurationsobjekt
TOON håndterer mere end tabeldata. For strukturerede objekter — den slags ting du ville finde i en apps runtime-konfiguration — bruger TOON en inline-objektnotation med indlejret struktur. Tænk på dette som et modstykke til serialiseringsformater som TOML eller YAML, men slankere. Her er en realistisk appkonfiguration, der viser serverindstillinger, databaseindstillinger og funktionsflags:
{
"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
}
}Den samme konfiguration i TOON-objektnotation — nøgler er ikke citeret, indlejring bruger inline-parenteser:
{
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}
}database-blokken ovenfor er host:db.internal.example.com fint som det er — ingen anførselstegn nødvendig, fordi værdien ikke indeholder nogen af dem. Hvis en værdi gør indeholder et komma eller kolon, omgiv det med dobbelte anførselstegn: dsn:"host:5432,sslmode=require".Finansielle transaktioner
Finansielle data er en anden høj-værdi LLM-use case: svindelsignaler, afstemningskontroller, kategorisering. Blandingen af streng-ID'er, numeriske beløb, valutakoder, status-enums og tidsstempler kortlægger rent til TOONs tabelformat. Her er et realistisk transaktionsudsnit:
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:15ZIndsæt dette i en prompt ved siden af "markér alle transaktioner over £5.000 eller med status flagged eller failed", og modellen vil svare på sekunder. TOON-repræsentationen er kompakt nok til, at du komfortabelt ville passe flere hundrede rækker i en enkelt prompt uden at ramme kontekstgrænser på de fleste modeller.
Kombination af tabeldata og objektdata i ét dokument
Her er noget, som hverken JSON eller CSV håndterer klart: et dokument, der har både en metadata-header (et enkelt konfigurationsobjekt) og en datatabel i den samme payload. Tænk på en rapport med en kontekstblok øverst — hvem der genererede den, hvilken tidsperiode den dækker, hvilke filtre der blev anvendt — efterfulgt af de faktiske datarækker. I JSON ville du skulle omgive alt i et konvolutsobjekt med en "meta"-nøgle og en "rows"-nøgle, hvilket tilføjer endnu et niveau af indlejring. CSV kan slet ikke gøre det. TOON håndterer det naturligt:
{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,100000Den første linje er et TOON-objekt — rapportens metadata. Den tomme linje adskiller det fra den tabelsektion, der følger. Et enkelt decode()-kald fra @toon-format/toon returnerer begge dele. Du kan sende dette hele dokument til en LLM med et spørgsmål som "hvilke repræsentanter er på vej til at ramme kvoten?" og den har alt, hvad den har brug for: rapport-konteksten og dataene, i én kompakt payload.
Brug af npm-pakken
Alle disse eksempler kan kodes og afkodes programmatisk. @toon-format/toon-pakken er referenceimplementeringen. Installer den i ethvert Node.js- eller browser-projekt:
npm install @toon-format/toonKode derefter dine data, inden du sender dem til en LLM API, og afkod svaret på vej tilbage:
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"Opsummering
Mønstrene ovenfor — produktkataloger, revisionslogge, metriktabeller, konfigurationsobjekter, finansielle data, blandede header+tabel-dokumenter — dækker langt størstedelen af de strukturerede data, udviklere faktisk sender til LLM'er. TOON håndterer dem alle godt, og tokenbesparelserne er betydelige i alle tilfælde. Kernereglen er simpel: JSON gentager nøglenavne på hver række; TOON gør det ikke. For tabelformet dataserialisering, der skal ind i et LLM-kontekstvindue, er den gentagelse rent spild.
Brug JSON til TOON-konverteren til at konvertere eksisterende JSON til TOON. Brug TOON til JSON-konverteren den anden vej, efter en LLM returnerer TOON. TOON Formatter renser og validerer TOON-strenge, og TOON Validator fanger syntaksfejl, inden de når din rørledning. npm-pakken @toon-format/toon håndterer kodning og afkodning på to kodelinjer — alle ovenstående eksempler virker ud af boksen.