De fleste udviklere har en kort mental liste over dataformater: JSON til API'er, CSV til regneark, YAML til konfigurationsfiler, måske XML hvis du arbejder med legacy-systemer. Men der er et nyere format, som stille og roligt baner sig vej ind i AI-værktøjsrummet og er værd at kende til — TOON, eller Token-Oriented Object Notation. Det blev designet fra bunden til et specifikt problem: at sende strukturerede data til store sprogmodeller uden at brænde dit tokenbudget af.
Hvad er TOON?
TOON står for Token-Oriented Object Notation. Det er et kompakt dataserialiseringsformat bygget til at minimere antallet af tokens, der forbruges, når strukturerede data er indlejret i LLM-prompts eller svar. Tænk på det som JSON med al redundans fjernet — ingen gentagne nøglenavne i arrays, ingen unødvendige anførselstegn, ingen efterfølgende whitespace — kun signalet med så lidt syntaktisk støj som muligt.
npm-pakket er @toon-format/toon,
og det giver dig en ligetil encode / decode API, der fungerer i ethvert
Node.js-projekt eller moderne bundler.
TOON-filer bruger filendelsen .toon.
Hvorfor ikke bare bruge JSON?
JSON er fremragende til maskine-til-maskine-kommunikation, hvor båndbredde er billig og parsing håndteres af runtime'en. Men når du sender data som en del af en prompt til OpenAI API eller Anthropic API, tæller hvert tegn — bogstaveligt. Begge API'er opkræver pr. token, og tokens svarer omtrent til 4 tegn engelsk tekst.
Tænk på en tabel med 100 brugerposter. I JSON ville du gentage nøglerne — "id",
"name", "role", "email" — én gang pr. post. Det er 100 kopier af samme
strukturelle information. TOONs tabelformat definerer disse nøgler én gang og viser derefter værdier række for række,
på samme måde som CSV gør, men med objektstrukturen bevaret. Tokenbesparelserne på virkelige datasæt
kan være 40–70% sammenlignet med kompakt JSON.
TOON-syntaks i korte træk
TOON understøtter fire kernedata-former: skalarer (strenge, tal, booleaner), arrays, objekter og tabeldata. Skalar- og samlingssyntaksen vil se bekendt ud, hvis du har arbejdet med JSON — tabelformatet er der, hvor TOON virkelig adskiller sig.
Et simpelt objekt fjerner det ydre klammers whitespace, udelader unødvendige anførselstegn og adskiller nøgle–værdi-par med kommaer:
{name:Alice,age:30,role:admin}Et simpelt array af skalarer ser præcis ud, som man ville forvente:
[1,2,3]Nu er her, hvor det bliver interessant — tabeldata. Det er syntaksen, der gør TOON overbevisende til LLM-anvendelsestilfælde. I stedet for at gentage nøgler for hvert objekt i et array, erklærer du skemaet én gang i headeren og viser værdier række for række:
users[3]{id,name,role}:
1,Alice,admin
2,Bob,user
3,Charlie,editorDen blok repræsenterer et array af 3 brugerobjekter — svarende til JSON nedenfor — men på en brøkdel
af tokens. Headeren users[3]{id,name,role} fortæller en parser: "dette er en variabel med navnet
users, den har 3 rækker, og hver række kortlægger til felterne id, name og role". Rækkerne er rene værdier,
ingen nøglegentagelse.
[
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "user" },
{ "id": 3, "name": "Charlie", "role": "editor" }
]Installation og brug af @toon-format/toon-pakken
Den officielle npm-pakke håndterer både kodning af JavaScript-værdier til TOON-strenge og afkodning af TOON- strenge tilbage til JavaScript-objekter og arrays. Installer den fra npm-registret:
npm install @toon-format/toonPakken eksporterer to funktioner — encode og decode:
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}Indstillingen indent i encode() styrer, om outputtet er pænt formateret.
Til LLM-prompts vil du normalt ønsket kompakt output (ingen indrykning) for at spare tokens. Til fejlretning eller
menneskelæsbare .toon-filer giver { indent: 2 } dig pænt formateret output.
Et virkelighedsnært anvendelsestilfælde: Sende poster til et LLM
Forestil dig, at du bygger en produktanalyse-funktion, der skal opsummere brugeraktivitet. Du henter seneste sessioner fra din database og vil sende dem til et LLM til naturlig-sproglig opsummering. Sådan ser det ud med TOON:
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-repræsentationen af disse 5 sessionsposter er betydeligt kortere end tilsvarende JSON,
som ville gentage "userId", "action", "duration" og "page"
fem gange hver. Over hundredvis af poster er besparelserne væsentlige og oversættes direkte til lavere
API-omkostninger og hurtigere svartider (færre tokens at behandle i opmærksomhedsvinduer).
Vigtige datatyper i TOON
TOON kortlægger rent til de primitiver, du allerede bruger i JavaScript og de fleste andre sprog:
- Strenge — Uden anførselstegn, når de ikke indeholder specialtegn. Citeret med dobbelte anførselstegn, når de indeholder kommaer, kolon eller whitespace.
- Tal — Heltal og decimaler skrevet som de er:
42,3.14,-7. - Booleaner —
trueogfalse, samme som JSON. - Null — Skrevet som
nullfor fraværende eller udefinerede værdier. - Arrays — Inline-parentes-syntaks
[val1,val2,val3]for korte lister; tabelheader-syntaks for arrays af objekter. - Objekter — Klammesyntaks
{key:value,key2:value2}for enkelt-objekter. - Tabeldata — Stjerne i showet:
name[n]{col1,col2,...}:-header efterfulgt af kommaseparerede rækker — ideel til enhver samling af poster med samme form.
Hvornår skal man vælge TOON vs. andre formater
TOON forsøger ikke at erstatte JSON som et generelt udvekslingsformat. Det udfylder en specifik niche. Her er en hurtig beslutningsguide:
- Brug JSON, når du bygger REST API'er, gemmer dokumenter i en database eller sender data mellem tjenester. JSON er universelt understøttet, har gode værktøjer og er læsbar for mennesker.
- Brug TOON, når strukturerede data er en del af en prompt eller et LLM-kontekstvindue, og tokenantal er vigtigt. Tabelformatet skinner, når du arbejder med rækker af poster — brugerlister, logindgange, produktkataloger, analysebegivenheder.
- Brug CSV, når du kun behøver flade tabeldata, og forbrugeren forventer CSV (regneark, BI-værktøjer). CSV har ingen objekt-indlejring, så TOON er mere udtryksfuldt.
- Brug YAML til menneskeneredigerede konfigurationsfiler, hvor læsbarhed og kommentarer er vigtigere end kompakthed.
- Brug TOON til LLM-værktøjsoutput også: hvis et LLM kalder dit værktøj og returnerer strukturerede resultater, sparer kodning af disse resultater i TOON tokens på både input- og output-siden af API-kaldet.
Opsummering
TOON — Token-Oriented Object Notation — er et kompakt serialiseringsformat bygget til LLM-æraen. Det bevarer den velkendte struktur fra JSON (objekter, arrays, skalarer), mens det introducerer en tabelsyntaks, der eliminerer redundant nøglegentagelse på tværs af poster. Resultatet er et format, der kan være 40–70% mindre end tilsvarende JSON, hvilket direkte oversættes til lavere tokenomkostninger, når man arbejder med OpenAI API, Anthropic API, eller en anden token-faktureret LLM-tjeneste.
Hvis du vil udforske TOON praktisk, har vi en komplet suite af værktøjer her:
brug TOON Formatter til at smukt udskrive og inspicere TOON-dokumenter,
TOON Validator til at fange syntaksfejl,
JSON til TOON-konverteren til at migrere eksisterende payloads,
og TOON til JSON-konverteren, hvis du har brug for at gå den anden vej.
npm-pakken @toon-format/toon
giver dig encode og decode til at integrere TOON direkte i din
Node.js- eller browser-side-kode på få minutter.