Både JSON og TOON repræsenterer strukturerede data. Begge er tekstbaserede. Begge kan beskrive objekter, arrays og indlejrede hierarkier. Så hvis du er stødt på TOON og undrede dig over, om det bare er endnu et JSON-alternativ, der forsøger at løse et problem, der ikke eksisterer — det er et rimeligt spørgsmål. Svaret er: de er optimeret til helt forskellige opgaver, og når du ser det udlagt, bliver valget indlysende.
JSON er det universelle sprog for dataudveksling. Det har været rygraden i REST API'er i mere end et årti, er understøttet nativt i alle moderne programmeringssprog og er det, du som standard griber efter. TOON er et nyere format med et snævrere mission: minimering af tokenforbrug, når du sender strukturerede data til og fra store sprogmodeller. Samme underliggende data, radikalt forskelligt fodaftryk.
Hvad gør JSON godt
JSONs superkraft er alstedsværelse. Specifikationen RFC 8259 er enkel nok til at passe på få sider, hvilket er grunden til, at alle sprog fra Python til Go til Rust har en førsteklasses JSON-parser i sit standardbibliotek eller økosystem. Du behøver ikke installere noget. Du behøver ikke forklare formatet for dine kolleger. Og værktøjer — formaterere, validatorer, skema-validatorer — er universelt tilgængelige.
- Universelt understøttet. Alle sprog, alle runtime-miljøer, alle cloud-tjenester taler JSON nativt.
- Menneskelæsbar. Nøgler er citerede strenge, struktur er eksplicit med klammer og parenteser.
- Typede primitiver. Tal, booleaner, nuller, strenge, arrays og objekter — alle utvetydigt repræsenteret.
- Rige værktøjer. Linters, formaterere, JSON Schema-validatorer, JSONPath-forespørgselsmotorer — økosystemet er enormt.
- REST API-standard.
Content-Type: application/jsoner standardforventningen på tværs af næsten alle HTTP API'er.
Hvad gør TOON anderledes
TOON blev bygget med én specifik begrænsning i tankerne: LLM-kontekstvinduer og tokenomkostninger. Når du kalder OpenAI API eller en anden LLM-udbyder, betaler du pr. token. Tokens er ikke tegn — de er omtrent ordstumper, og JSONs strukturelle interpunktion (anførselstegn, kolon, kommaer, klammer) forbruger et overraskende antal af dem. For tabeldata er JSON særlig spildsom: hver række gentager hvert nøglenavn.
TOON løser dette med en kompakt notation. For tabeldata erklæres nøgler én gang i en header, og rækker er rene kommaseparerede værdier. For enkelt-objekter og arrays bruger det en smal inline-syntaks. OpenAI-tokenizeren er et nyttigt værktøj til at se forskellen i praksis — indsæt de samme data i begge formater og sammenlign tokenantallet direkte.
Side om side: 10-rækkers datasæt
Her er en produkttabel med 10 rækker i JSON — det slags ting du måske sender til et LLM for at bede det om at analysere prissætning eller kategorisere elementer:
[
{"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}
]Nu de samme data i TOON. Nøgler erklæres én gang i headeren — rækker indeholder kun værdier:
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,falseBrug af TOON i JavaScript / TypeScript
npm-pakken
@toon-format/toon
håndterer kodning og afkodning. Installer den én gang, og API'et er ligetil:
npm install @toon-format/toonimport { 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"Du kan også kode et enkelt objekt inline. TOONs objektnotation bruger klammer uden at citere nøgler, og dens array-notation er blot kommaseparerede værdier i parenteser:
// TOON object
{name:Alice,age:30,role:admin}
// TOON array
[1,2,3,4,5]Hvornår skal man bruge TOON
- LLM-prompts med strukturerede data. Indfødning af en tabel, liste over poster eller produktkatalog i et GPT-4 / Claude / Gemini-kald. Tokenbesparelserne reducerer direkte din API-regning.
- LLM-output-parsing. Hvis du instruerer et LLM til at svare i TOON, er svarene kortere og billigere på både input- og output-tokens.
- Tabeldata specifikt. TOONs header-én-gang-derefter-rækker-struktur er dramatisk mere kompakt end JSON til alt, der har tabelform.
- Batchbehandlings-pipelines. Kører du tusindvis af poster igennem et LLM dagligt? Selv en 40% tokenreduktion lægger sig hurtigt op.
- Kontekstvindue-tryk. Når du støder mod en models kontekstgrænse, lader TOON dig passe mere data ind i det samme vindue.
Hvornår skal man holde sig til JSON
- REST API'er. Alle HTTP-klienter, alle server-frameworks, alle API-gateways taler JSON. Bryd ikke konventionen.
- Konfigurationsfiler.
package.json,tsconfig.json,settings.json— JSON er standarden for konfiguration i de fleste økosystemer. - Databaselagring. PostgreSQLs
jsonb, MongoDB-dokumenter, DynamoDB — disse er JSON-native. TOON hører ikke hjemme her. - Inter-tjeneste-kommunikation. Når to tjenester taler med hinanden, brug JSON. Det er hvad dine lognings-, sporingssystems- og overvågningsværktøjer forstår.
- Offentlige API'er. Hvis eksterne udviklere forbruger din API, er JSON den forventede kontrakt. TOON er en intern optimering, ikke et offentligt grænsefladeformat.
- Browser-native parsing.
JSON.parse()er indbygget i alle browsere. TOON kræver et bibliotek.
Beslutningsguide
En hurtig tjekliste til at afgøre spørgsmålet:
- Går dataene ind i en LLM-prompt? Brug TOON.
- Forventes LLM'et at returnere strukturerede data? Brug TOON.
- Er dataene tabelformat (samme nøgler over mange rækker)? Overvej stærkt TOON.
- Er dette en REST API-anmodning eller svar? Brug JSON.
- Er dette en konfigurationsfil? Brug JSON (eller YAML).
- Er dette gemt i en database? Brug JSON.
- Vil ikke-LLM-værktøjer forbruge disse data? Brug JSON.
- Er du usikker på, om tokenomkostninger har betydning for dit anvendelsestilfælde? Start med JSON, optimér senere.
Nyttige værktøjer
Hvis du arbejder med begge formater, vil disse værktøjer spare dig tid. Brug JSON til TOON-konverteren til at tage eksisterende JSON-data og producere en kompakt TOON-repræsentation klar til LLM-input. TOON til JSON-konverteren går den anden vej — nyttig når et LLM returnerer TOON, og du har brug for at indmate resultatet i et JSON-native downstream-system. TOON Formatter rydder op og validerer TOON-strenge, og JSON Formatter er fortsat go-to til at forskønne rå JSON-klumper.
Opsummering
JSON og TOON er ikke konkurrenter i traditionel forstand — de retter sig mod forskellige dele af dit stack. JSON ejer API-laget, konfigurationsfiler og datalagring. TOON ejer LLM-laget, hvor tokenantal er penge og kontekstvindueplads er kostbar. Det gode er, at du kan bruge begge i det samme projekt uden friktion: gem og overfør data som JSON, kode til TOON umiddelbart før ethvert LLM-kald og afkode tilbage til JSON eller et native objekt på vej ud. Når du har sat det mønster op, er tokenbesparelserne automatiske.