Både JSON og TOON representerer strukturerte data. Begge er tekstbaserte. Begge kan beskrive objekter, arrays og nestede hierarkier. Så hvis du har støtt på TOON og lurt på om det bare er enda et JSON-alternativ som forsøker å løse et problem som ikke eksisterer — det er et rimelig spørsmål. Svaret er: de er optimalisert for helt forskjellige oppgaver, og når du ser det lagt ut, blir valget åpenbart.

JSON er det universelle språket for datautveksling. Det har vært ryggraden i REST API-er i mer enn et tiår, er støttet nativt i alle moderne programmeringsspråk og er det du som standard griper etter. TOON er et nyere format med et snevrere oppdrag: minimering av tokenforbruk når du sender strukturerte data til og fra store språkmodeller. Samme underliggende data, radikalt forskjellig fotavtrykk.

Hva gjør JSON bra

JSONs superkraft er allestedsnærvær. Spesifikasjonen RFC 8259 er enkel nok til å passe på noen få sider, noe som er grunnen til at alle språk fra Python til Go til Rust har en førsteklasses JSON-parser i sitt standardbibliotek eller økosystem. Du trenger ikke installere noe. Du trenger ikke forklare formatet for kollegene dine. Og verktøy — formatere, validatorer, skjema-validatorer — er universelt tilgjengelige.

  • Universelt støttet. Alle språk, alle kjøretidsmiljøer, alle skytjenester snakker JSON nativt.
  • Menneskelesbar. Nøkler er siterte strenger, struktur er eksplisitt med klammer og parenteser.
  • Typede primitiver. Tall, boolske verdier, nuller, strenger, arrays og objekter — alle utvetydige representert.
  • Rike verktøy. Lintere, formatere, JSON Schema-validatorer, JSONPath-spørringsmotorer — økosystemet er enormt.
  • REST API-standard. Content-Type: application/json er standardforventningen på tvers av nesten alle HTTP API-er.

Hva gjør TOON annerledes

TOON ble bygget med én spesifikk begrensning i tankene: LLM-kontekstvinduer og tokenkostnader. Når du kaller OpenAI API eller en annen LLM-leverandør, betaler du per token. Tokens er ikke tegn — de er omtrent ordstumper, og JSONs strukturelle tegnsetting (anførselstegn, kolon, kommaer, klammer) bruker et overraskende antall av dem. For tabelldata er JSON spesielt sløsende: hver rad gjentar hvert nøkkelnavn.

TOON løser dette med en kompakt notasjon. For tabelldata erklæres nøkler én gang i en overskrift, og rader er rene kommaseparerte verdier. For enkelt-objekter og arrays bruker det en smal inline-syntaks. OpenAI-tokenizeren er et nyttig verktøy for å se forskjellen i praksis — lim inn de samme dataene i begge formater og sammenlign tokenantallet direkte.

Side om side: 10-raders datasett

Her er en produkttabell med 10 rader i JSON — det slags ting du kanskje sender til en LLM for å be den om å analysere prissetting eller kategorisere elementer:

json
[
  {"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}
]

Nå de samme dataene i TOON. Nøkler erklæres én gang i overskriften — rader inneholder bare verdier:

text
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,false
Tokenbesparelser i praksis: JSON-versjonen ovenfor klokker inn på omtrent 420 tokens i OpenAI-tokenizeren. TOON-versjonen er ca. 195 tokens — mindre enn halvparten. I skala (tusenvis av API-kall per dag, eller datasett med hundrevis av rader) blir det reelle penger.

Bruk av TOON i JavaScript / TypeScript

npm-pakken @toon-format/toon håndterer koding og dekoding. Installer den én gang, og API-et er rett frem:

bash
npm install @toon-format/toon
ts
import { 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 objektnotasjon bruker klammer uten å sitere nøkler, og dens array-notasjon er bare kommaseparerte verdier i parenteser:

text
// TOON object
{name:Alice,age:30,role:admin}

// TOON array
[1,2,3,4,5]

Når skal man bruke TOON

  • LLM-prompter med strukturerte data. Mating av en tabell, liste over poster eller produktkatalog i et GPT-4 / Claude / Gemini-kall. Tokenbesparelsene reduserer direkte API-regningen din.
  • LLM-utdata-parsing. Hvis du instruerer en LLM til å svare i TOON, er svarene kortere og billigere på både inndata- og utdata-tokens.
  • Tabelldata spesifikt. TOONs overskrift-én-gang-deretter-rader-struktur er dramatisk mer kompakt enn JSON for alt som har tabellform.
  • Batchbehandlings-pipelines. Kjører du tusenvis av poster gjennom en LLM daglig? Selv en 40% tokenreduksjon legger seg raskt opp.
  • Kontekstvindu-press. Når du støter mot en modells kontekstgrense, lar TOON deg passe mer data inn i det samme vinduet.

Når skal man holde seg til JSON

  • REST API-er. Alle HTTP-klienter, alle server-rammeverk, alle API-gatewayer snakker JSON. Ikke bryt konvensjonen.
  • Konfigurasjonsfiler. package.json, tsconfig.json, settings.json — JSON er standarden for konfigurasjon i de fleste økosystemer.
  • Databaselagring. PostgreSQLs jsonb, MongoDB-dokumenter, DynamoDB — disse er JSON-native. TOON hører ikke hjemme her.
  • Tjeneste-til-tjeneste-kommunikasjon. Når to tjenester snakker med hverandre, bruk JSON. Det er hva loggings-, sporings- og overvåkningsverktøyene dine forstår.
  • Offentlige API-er. Hvis eksterne utviklere bruker API-et ditt, er JSON den forventede kontrakten. TOON er en intern optimalisering, ikke et offentlig grensesnittformat.
  • Nettleser-nativ parsing. JSON.parse() er innebygd i alle nettlesere. TOON krever et bibliotek.

Beslutningsveiledning

En rask sjekkliste for å avgjøre spørsmålet:

  • Går dataene inn i en LLM-prompt? Bruk TOON.
  • Forventes LLM-en å returnere strukturerte data? Bruk TOON.
  • Er dataene tabellformat (samme nøkler over mange rader)? Vurder sterkt TOON.
  • Er dette en REST API-forespørsel eller svar? Bruk JSON.
  • Er dette en konfigurasjonsfil? Bruk JSON (eller YAML).
  • Er dette lagret i en database? Bruk JSON.
  • Vil ikke-LLM-verktøy konsumere disse dataene? Bruk JSON.
  • Er du usikker på om tokenkostnader har betydning for brukstilfellet ditt? Start med JSON, optimaliser senere.

Nyttige verktøy

Hvis du jobber med begge formater, vil disse verktøyene spare deg tid. Bruk JSON til TOON-konvertereren til å ta eksisterende JSON-data og produsere en kompakt TOON-representasjon klar til LLM-inndata. TOON til JSON-konvertereren går den andre veien — nyttig når en LLM returnerer TOON, og du trenger å mate resultatet inn i et JSON-nativt downstream-system. TOON Formatter rydder opp og validerer TOON-strenger, og JSON Formatter er fortsatt go-to til å forskjønne rå JSON-klumper.

Oppsummering

JSON og TOON er ikke konkurrenter i tradisjonell forstand — de retter seg mot forskjellige deler av stakken din. JSON eier API-laget, konfigurasjonsfiler og datalagring. TOON eier LLM-laget, der tokenantall er penger og kontekstvindueplass er kostbar. Det gode er at du kan bruke begge i det samme prosjektet uten friksjon: lagre og overfør data som JSON, kode til TOON umiddelbart før ethvert LLM-kall og dekode tilbake til JSON eller et nativt objekt på vei ut. Når du har satt opp det mønsteret, er tokenbesparelsene automatiske.