Formatdokumentasjon elsker leketøyseksempler — tre rader, falske navn, fem kolonner. Det er fint for å lære syntaksen, men det forteller deg ikke om et format håndterer formene du faktisk jobber med på jobb. Denne artikkelen hopper over leketøyene. Nedenfor er datamønstrene som konstant dukker opp i virkelig backend-utvikling — produktkataloger, revisjonslogger, metriktabeller, konfigurasjonsobjekter, finansielle transaksjoner — vist i både JSON og TOON side om side, slik at du kan se nøyaktig hva du sparer, og der TOON tjener sin plass. Alle data er realistiske; ingen foo, bar eller plassholdernavn i sikte. For bakgrunn om selve formatet, se TOON-syntaksveiledningen.

E-handel produktkatalog

Et produktarray er sannsynligvis det mest vanlige utviklere sender til en LLM — "klassifiser disse elementene", "finn den billigste i hver kategori", "merk alt som er utsolgt med en pris over $50". Her er et realistisk katalogutsnitt i JSON først:

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"}
]

Nå den samme katalogen i TOON. Kolonneoverskrifter erklæres én gang; hver rad er bare verdier:

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
De seks kolonneoverskriftene i TOON skrives nøyaktig én gang. I JSON gjentas de på hver rad. Ved rad 3 har overskriften allerede betalt for seg selv i tokenbesparelser — og på en 200-raders katalog er forskjellen dramatisk. Bruk OpenAI-tokenizeren for å verifisere besparelsene for dine egne data.

Brukeraktivitet / revisjonslogg

Revisjonslogger er akkurat den typen data du vil sende til en LLM med en prompt som "oppsummer hva denne brukeren gjorde den siste timen" eller "merk mistenkelige tilgangsmønstre". De er høy-volum, repetitive, og kolonnenavnene er identiske på hver rad. Revisjonsspor er også det første som sprenger kontekstvinduet ditt når du limer dem inn som JSON. Her er en realistisk 9-raders logg i 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

Tilsvarende JSON ville gjenta "userId", "action", "resourceId", "resourceType", "timestamp" og "ip" på alle ni rader — 54 nøkkelgjentakelser for seks feltnavn. I TOON fremgår de nøyaktig én gang. For revisjonslogger med hundrevis av oppføringer er det forskjellen mellom å passe dataene i prompten din og ikke gjøre det.

API-hastighetsbegrensning / metrikkdata

Driftsmetrikker — latenspersentiler, feilrater, gjennomstrømning — er en annen naturlig passform for TOON. Dataene er talltunge og perfekt tabellformede. Du kan sende dette til en LLM for å spørre "hvilke endepunkter har p99-latens over 500ms?" eller "der øker feilraten?" Dette er formen på data du typisk ville se komme ut av en Node.js-metrikkpipeline eller et Prometheus-skrap:

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

LLM-en kan umiddelbart svare på spørsmål om denne tabellen uten noen kontekst-overhead. Legg merke til at /api/v2/search og /api/v2/checkout begge skiller seg ut med høy p99 og forhøyede feilrater — akkurat det typen mønster en LLM kan identifisere umiddelbart når du presenterer dataene tydelig.

Nestet konfigurasjonsobjekt

TOON håndterer mer enn tabelldata. For strukturerte objekter — den typen ting du ville finne i en apps kjøretidskonfigurasjon — bruker TOON en inline-objektnotasjon med nestet struktur. Tenk på dette som et motstykke til serialiseringsformater som TOML eller YAML, men slankere. Her er en realistisk appkonfigurasjon som viser serverinnstillinger, databaseinnstillinger og funksjonsflagger:

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
  }
}

Den samme konfigurasjonen i TOON-objektnotasjon — nøkler er ikke sitert, nesting bruker inline-parenteser:

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 objektsyntaks siterer ikke nøkler med mindre en verdi inneholder et komma eller kolon. I database-blokken ovenfor er host:db.internal.example.com fint som det er — ingen anførselstegn nødvendig fordi verdien ikke inneholder noen av dem. Hvis en verdi gjør inneholder et komma eller kolon, omgir du det med doble anførselstegn: dsn:"host:5432,sslmode=require".

Finansielle transaksjoner

Finansielle data er et annet høy-verdi LLM-brukstilfelle: svindelsignaler, avstemmingskontroller, kategorisering. Blandingen av streng-ID-er, numeriske beløp, valutakoder, status-enum-er og tidsstempler kartlegges rent til TOONs tabellformat. Her er et realistisk transaksjonsutsnitt:

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

Lim dette inn i en prompt ved siden av "merk alle transaksjoner over £5 000 eller med status flagged eller failed", og modellen vil svare på sekunder. TOON-representasjonen er kompakt nok til at du komfortabelt ville passe inn flere hundre rader i en enkelt prompt uten å treffe kontekstgrenser på de fleste modeller.

Kombinere tabelldata og objektdata i ett dokument

Her er noe verken JSON eller CSV håndterer tydelig: et dokument som har både en metadataoverskrift (et enkelt konfigurasjonsobjekt) og en datatabell i samme payload. Tenk på en rapport med en kontekstblokk øverst — hvem som genererte den, hvilken tidsperiode den dekker, hvilke filtre som ble brukt — etterfulgt av de faktiske dataradene. I JSON måtte du pakke alt inn i et konvoluttobjekt med en "meta"-nøkkel og en "rows"-nøkkel, noe som legger til enda et nestenivå. CSV kan ikke gjøre det i det hele tatt. TOON håndterer det naturlig:

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

Den første linjen er et TOON-objekt — rapportens metadata. Den tomme linjen skiller det fra tabelldelen som følger. Et enkelt decode()-kall fra @toon-format/toon returnerer begge deler. Du kan sende hele dette dokumentet til en LLM med et spørsmål som "hvilke representanter er på vei til å nå kvoten?" og den har alt den trenger: rapport-konteksten og dataene, i én kompakt payload.

Dette blandede formatet er spesielt kraftfullt for LLM-pipelines. I stedet for å bygge et JSON-konvolutt med nestede nøkler, skriver du et flatt overskriftsobjekt + en navngitt tabell. Modellen leser det naturlig, og koden din for å generere det er triviell. Bruk JSON til TOON-konvertereren for å transformere eksisterende JSON-payloads, eller TOON Formatter for å rydde opp og validere håndskrevet TOON.

Bruk av npm-pakken

Alle disse eksemplene kan kodes og dekodes programmatisk. @toon-format/toon-pakken er referanseimplementeringen. Installer den i et hvilket som helst Node.js- eller nettleserprosjekt:

bash
npm install @toon-format/toon

Kode deretter dataene dine før du sender dem til et LLM API, og dekode svaret på vei tilbake:

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"

Oppsummering

Mønstrene ovenfor — produktkataloger, revisjonslogger, metriktabeller, konfigurasjonsobjekter, finansielle data, blandede overskrift+tabell-dokumenter — dekker det store flertallet av strukturerte data utviklere faktisk sender til LLM-er. TOON håndterer dem alle godt, og tokenbesparelsene er betydelige i alle tilfeller. Kjerneregelen er enkel: JSON gjentar nøkkelnavn på hver rad; TOON gjør det ikke. For tabellformert dataserialisering som skal inn i et LLM-kontekstvindu, er den gjentakelsen rent sløseri.

Bruk JSON til TOON-konvertereren for å konvertere eksisterende JSON til TOON. Bruk TOON til JSON-konvertereren den andre veien etter at en LLM returnerer TOON. TOON Formatter renser og validerer TOON-strenger, og TOON Validator fanger syntaksfeil før de når pipelinen din. npm-pakken @toon-format/toon håndterer koding og dekoding på to kodelinjer — alle eksemplene ovenfor fungerer ut av boksen.