De flesta utvecklare har en kort mental lista med dataformat: JSON för API:er, CSV för kalkylblad, YAML för konfigurationsfiler, kanske XML om du arbetar med äldre system. Men det finns ett nyare format som tyst banar sin väg in i AI-verktygsrymden och som är värt att känna till — TOON, eller Token-Oriented Object Notation. Det designades från grunden för ett specifikt problem: att skicka strukturerad data till stora språkmodeller utan att bränna igenom din tokenbudget.

Vad är TOON?

TOON står för Token-Oriented Object Notation. Det är ett kompakt dataserialiseringsformat som byggdes specifikt för att minimera antalet tokens som förbrukas när strukturerad data bäddas in i LLM-prompter eller svar. Tänk på det som JSON med all redundans borttagen — inga upprepade nyckelnamn i arrayer, inga onödiga citationstecken, inget avslutande tomt utrymme — bara signalen med så lite syntaktiskt brus som möjligt.

npm-paketet är @toon-format/toon, och det ger dig ett enkelt encode / decode API som fungerar i vilket Node.js-projekt eller modern bundler som helst. TOON-filer använder tillägget .toon.

Varför inte bara använda JSON?

JSON är utmärkt för maskin-till-maskin-kommunikation där bandbredd är billig och parsning hanteras av körtiden. Men när du skickar data som en del av en prompt till OpenAI API eller Anthropic API, räknas varje tecken — bokstavligen. Båda API:erna debiterar per token, och tokens motsvarar ungefär 4 tecken av engelsk text.

Tänk på en tabell med 100 användarposter. I JSON skulle du upprepa nycklarna — "id", "name", "role", "email" — en gång per post. Det är 100 kopior av samma strukturella information. TOONs tabellsyntax definierar dessa nycklar en gång och listar sedan värden rad för rad, på samma sätt som CSV gör, men med objektstrukturen bevarad. Tokenbesparingarna på verkliga dataset kan vara 40–70% jämfört med kompakt JSON.

Tumregel: Om du bäddar in mer än ett fåtal poster i en prompt, kommer TOON nästan alltid att vara billigare än JSON. Använd vår JSON till TOON-konverterare för att se exakt hur mycket mindre din payload blir.

TOON-syntax i korthet

TOON stöder fyra grundläggande dataformer: skalärer (strängar, tal, booleaner), arrayer, objekt och tabelldata. Skalär- och samlingssyntaxen ser bekant ut om du har arbetat med JSON — tabellformatet är där TOON verkligen skiljer sig.

Ett enkelt objekt tar bort det yttre klamrarnas tomt utrymme, utelämnar onödiga citationstecken och separerar nyckel–värde-par med kommatecken:

text
{name:Alice,age:30,role:admin}

En enkel array av skalärer ser ut precis som man skulle förvänta sig:

text
[1,2,3]

Nu är det här det blir intressant — tabelldata. Det är syntaxen som gör TOON övertygande för LLM-användningsfall. Istället för att upprepa nycklar för varje objekt i en array, deklarerar du schemat en gång i rubriken och listar värden rad för rad:

text
users[3]{id,name,role}:
  1,Alice,admin
  2,Bob,user
  3,Charlie,editor

Det blocket representerar en array med 3 användarobjekt — motsvarande JSON nedan — men på en bråkdel av tokens. Rubriken users[3]{id,name,role} talar om för en parser: "detta är en variabel som heter users, den har 3 rader, och varje rad mappar till fälten id, name och role". Raderna är rena värden, ingen nyckelupprepning.

json
[
  { "id": 1, "name": "Alice", "role": "admin" },
  { "id": 2, "name": "Bob",   "role": "user"  },
  { "id": 3, "name": "Charlie", "role": "editor" }
]

Installera och använda @toon-format/toon-paketet

Det officiella npm-paketet hanterar både kodning av JavaScript-värden till TOON-strängar och avkodning av TOON- strängar tillbaka till JavaScript-objekt och arrayer. Installera det från npm-registret:

bash
npm install @toon-format/toon

Paketet exporterar två funktioner — encode och decode:

ts
import { encode, decode } from '@toon-format/toon';

// Decode a TOON string → JavaScript value
const toonString = `users[3]{id,name,role}:
  1,Alice,admin
  2,Bob,user
  3,Charlie,editor`;

const users = decode(toonString);
console.log(users[0].name); // "Alice"
console.log(users[1].role); // "user"

// Encode a JavaScript value → TOON string
const config = {
  model: 'gpt-4o',
  temperature: 0.7,
  maxTokens: 1024,
  stream: true
};

const toon = encode(config, { indent: 2 });
console.log(toon);
// {model:gpt-4o,temperature:0.7,maxTokens:1024,stream:true}

Alternativet indent i encode() styr om utdata är snygg-utskriven. För LLM-prompter vill du vanligtvis ha kompakt utdata (ingen indragning) för att spara tokens. För felsökning eller läsbara .toon-filer ger { indent: 2 } dig snyggt formaterad utdata.

Ett verkligt användningsfall: skicka poster till ett LLM

Föreställ dig att du bygger en produktanalysfunktion som behöver sammanfatta användaraktivitet. Du hämtar senaste sessionsposter från din databas och vill skicka dem till ett LLM för sammanfattning på naturligt språk. Så här ser det ut med TOON:

ts
import { encode } from '@toon-format/toon';

const sessions = [
  { userId: 101, action: 'login',        duration: 0,   page: '/dashboard' },
  { userId: 101, action: 'view_report',  duration: 142, page: '/reports/q1' },
  { userId: 101, action: 'export_csv',   duration: 8,   page: '/reports/q1' },
  { userId: 102, action: 'login',        duration: 0,   page: '/dashboard' },
  { userId: 102, action: 'edit_profile', duration: 37,  page: '/settings'  }
];

const toonPayload = encode(sessions);
// sessions[5]{userId,action,duration,page}:
//   101,login,0,/dashboard
//   101,view_report,142,/reports/q1
//   101,export_csv,8,/reports/q1
//   102,login,0,/dashboard
//   102,edit_profile,37,/settings

const prompt = `Summarise the following user activity. Data is in TOON format.\n\n${toonPayload}`;

TOON-representationen av dessa 5 sessionsposter är avsevärt kortare än motsvarande JSON, som skulle upprepa "userId", "action", "duration" och "page" fem gånger vardera. Över hundratals poster är besparingarna avsevärda och översätts direkt till lägre API-kostnader och snabbare svarstider (färre tokens att bearbeta i uppmärksamhetsfönstret).

Viktiga datatyper i TOON

TOON mappar rent till primitiver du redan använder i JavaScript och de flesta andra språk:

  • Strängar — Utan citationstecken när de inte innehåller specialtecken. Citerade med dubbla citationstecken när de innehåller kommatecken, kolon eller tomt utrymme.
  • Tal — Heltal och decimaltal skrivna som de är: 42, 3.14, -7.
  • Booleanertrue och false, samma som JSON.
  • Null — Skrivet som null för frånvarande eller odefinierade värden.
  • Arrayer — Inline-klamrarsyntax [val1,val2,val3] för korta listor; tabellrubriks-syntax för arrayer av objekt.
  • Objekt — Klamrarsyntax {key:value,key2:value2} för enskilda objekt.
  • Tabelldata — Stjärnan i showen: name[n]{col1,col2,...}:-rubrik följt av kommaseparerade rader — idealisk för vilken samling av poster med samma form som helst.

När man ska välja TOON vs andra format

TOON försöker inte ersätta JSON som ett allmänt utbytesformat. Det fyller en specifik nisch. Här är en snabb beslutsguide:

  • Använd JSON när du bygger REST API:er, lagrar dokument i en databas eller skickar data mellan tjänster. JSON är universellt stödd, välverktygs och läsbar för människor.
  • Använd TOON när strukturerad data är en del av en prompt eller LLM-kontextfönster och tokenantal spelar roll. Tabellformatet lyser när du arbetar med rader av poster — användarlistor, loggposter, produktkataloger, analyshändelser.
  • Använd CSV när du bara behöver platt tabelldata och konsumenten förväntar sig CSV (kalkylblad, BI-verktyg). CSV har ingen objektnesting, så TOON är mer uttrycksfullt.
  • Använd YAML för mänskligt redigerade konfigurationsfiler där läsbarhet och kommentarer är viktigare än kompakthet.
  • Använd TOON för LLM-verktygsutdata också: om ett LLM anropar ditt verktyg och returnerar strukturerade resultat, sparar kodning av dessa resultat i TOON tokens på både inmatnings- och utmatningssidorna av API-anropet.
Vet du inte hur TOON jämförs med din nuvarande JSON-payload? Klistra in din JSON i JSON till TOON-konverteraren och verktyget visar dig båda representationerna sida vid sida, tillsammans med en uppskattad tokenantalsjämförelse.

Sammanfattning

TOON — Token-Oriented Object Notation — är ett kompakt serialiseringsformat byggt för LLM-eran. Det behåller den bekanta strukturen hos JSON (objekt, arrayer, skalärer) samtidigt som det introducerar en tabellsyntax som eliminerar redundant nyckelupprepning över poster. Resultatet är ett format som kan vara 40–70% mindre än motsvarande JSON, vilket direkt översätts till lägre tokenkostnader när man arbetar med OpenAI API, Anthropic API, eller vilken annan tokendebiterad LLM-tjänst som helst.

Om du vill utforska TOON hands-on har vi en fullständig uppsättning verktyg här: använd TOON Formatter för att snygg-skriva ut och inspektera TOON-dokument, TOON Validator för att fånga syntaxfel, JSON till TOON-konverteraren för att migrera befintliga payloads, och TOON till JSON-konverteraren om du behöver gå åt andra hållet. npm-paketet @toon-format/toon ger dig encode och decode för att integrera TOON direkt i din Node.js- eller webbläsarkod på några minuter.