Formatdokumentation älskar leksaksexempel — tre rader, falska namn, fem kolumner. Det är bra för att lära sig syntaxen, men det berättar inte om ett format hanterar de former du faktiskt har att göra med i jobbet. Den här artikeln hoppar över leksakerna. Nedan är datamönstren som dyker upp ständigt i verklig backendutveckling — produktkataloger, granskningsloggar, måtttabeller, konfigurationsobjekt, finansiella transaktioner — visade i både JSON och TOON sida vid sida, så du kan se exakt vad du sparar och var TOON tjänar sin plats. Alla data är realistiska; inga foo, bar eller platshållarnamn. För bakgrund om formatet självt, se TOON-syntaxguiden.
E-handelsproduktkatalog
En produktarray är förmodligen den enda vanligaste saken utvecklare skickar till ett LLM — "klassificera dessa artiklar", "hitta den billigaste i varje kategori", "flagga allt som inte är i lager med ett pris över 50 dollar". Här är en realistisk katalogskiva 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 samma katalog i TOON. Kolumnrubriker deklareras en gång; varje rad är bara värden:
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,AudioAnvändaraktivitet / Granskningslogg
Granskningsloggar är exakt det slag av data du skulle mata till ett LLM med en prompt som "sammanfatta vad den här användaren gjorde under den senaste timmen" eller "flagga misstänkta åtkomstmönster". De är av hög volym, repetitiva, och kolumnnamnen är identiska på varje rad. Granskningsspår tenderar också att vara det första som spränger ditt kontextfönster när du klistrar in dem som JSON. Här är en realistisk 9-raders logg 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.47Motsvarande JSON skulle upprepa "userId", "action", "resourceId", "resourceType", "timestamp", och "ip" på alla nio raderna — 54 nyckelupprepningar för sex fältnamn. I TOON visas de exakt en gång. För granskningsloggar med hundratals poster är det skillnaden mellan att data passar i din prompt och att det inte gör det.
API Rate Limit / Mätdata
Operationella mätvärden — latenspercentiler, felfrekvenser, genomströmning — är en annan naturlig passform för TOON. Data är numerikt tungt och perfekt tabellformat. Du kanske skickar detta till ett LLM för att fråga "vilka slutpunkter har p99-latens över 500ms?" eller "var stiger felfrekvensen?" Det här är formen av data du typiskt ser komma ut ur en Node.js-mätpipeline eller ett Prometheus-skrap:
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:et kan omedelbart svara på frågor om den här tabellen utan något kontextnötfall. Observera att /api/v2/search och /api/v2/checkout båda sticker ut med hög p99 och förhöjda felfrekvenser — exakt det slag av mönster ett LLM kan identifiera omedelbart när du presenterar data på ett rent sätt.
Nestat konfigurationsobjekt
TOON hanterar mer än tabelldata. För strukturerade objekt — det slag av saker du hittar i en apps körtidskonfiguration — använder TOON en inline objektnotation med nestad struktur. Tänk på det som en motpart till serialiseringsformat som TOML eller YAML, men magrare. Här är en realistisk appkonfiguration som visar serverinställningar, databasinställningar och funktionsflaggor:
{
"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
}
}Samma konfiguration i TOON-objektnotation — nycklar är ociterade, nesting använder inline klamrar:
{
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-blocket ovan är host:db.internal.example.com bra som det är — inga citationstecken behövs eftersom värdet varken innehåller kommatecken eller kolon. Om ett värde innehåller ett kommatecken eller kolon, wrap:a det med dubbla citationstecken: dsn:"host:5432,sslmode=require".Finansiella transaktioner
Finansdata är ett annat LLM-användningsfall med högt värde: bedrägeridetekteringstips, avstämningskontroller, kategorisering. Blandningen av sträng-ID:n, numeriska belopp, valutakoder, statusenums och tidsstämplar mappas rent till TOONs tabellformat. Här är en realistisk transaktionsskiva:
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:15ZKlistra in detta i en prompt bredvid "flagga transaktioner över £5 000 eller med status flagged eller failed" och modellen svarar på sekunder. TOON-representationen är kompakt nog att du bekvämt skulle passa in flera hundra rader i en enda prompt utan att träffa kontextgränser på de flesta modeller.
Kombinera tabell- och objektdata i ett dokument
Här är något som varken JSON eller CSV hanterar rent: ett dokument som har både ett metadatarubrik (ett enskilt konfigurationsobjekt) och en datatabell i samma payload. Tänk på en rapport med ett kontextblock överst — vem genererade den, vilken tidsperiod den täcker, vilka filter som tillämpades — följt av de faktiska dataraderna. I JSON behöver du wrapper-a allt i ett kuvertobjekt med en "meta"-nyckel och en "rows"-nyckel, vilket lägger till ytterligare ett nestingslager. CSV kan inte göra det alls. TOON hanterar det inbyggt:
{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örsta raden är ett TOON-objekt — rapportmetadata. Den tomma raden separerar det från det tabellformade avsnittet som följer. Ett enda decode()-anrop från @toon-format/toon returnerar båda. Du kan skicka hela det här dokumentet till ett LLM med en fråga som "vilka reps är på rätt spår för att nå kvoten?" och det har allt det behöver: rapport-kontexten och data, i en kompakt payload.
Använda npm-paketet
Alla dessa exempel kan kodas och avkodas programmatiskt. @toon-format/toon-paketet är referensimplementationen. Installera det i vilket Node.js- eller webbläsarprojekt som helst:
npm install @toon-format/toonKoda sedan dina data innan du skickar dem till något LLM API och avkoda svaret på vägen tillbaka:
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"Sammanfattning
Mönstren ovan — produktkataloger, granskningsloggar, måtttabeller, konfigurationsobjekt, finansdata, blandade rubrik+tabell-dokument — täcker den stora majoriteten av strukturerad data som utvecklare faktiskt skickar till LLM:er. TOON hanterar dem alla väl och tokenbesparingarna är avsevärda i varje fall. Grundregeln är enkel: JSON upprepar nyckelnamn på varje rad; TOON gör det inte. För tabelldataserialrering som går in i ett LLM-kontextfönster är den upprepningen rent slöseri.
För att konvertera befintlig JSON till TOON, använd JSON till TOON-konverteraren. För att gå åt andra hållet efter att ett LLM returnerar TOON, använd TOON till JSON-konverteraren. TOON Formatter rensar och validerar TOON-strängar och TOON Validator fångar syntaxfel innan de når din pipeline. npm-paketet @toon-format/toon hanterar kodning och avkodning i två rader kod — alla ovanstående exempel fungerar direkt.