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.

Tommelfingerregel: Hvis du indlejrer mere end et par poster i en prompt, vil TOON næsten altid være billigere end JSON. Brug vores JSON til TOON-konverter for at se præcis, hvor meget mindre din payload bliver.

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:

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

Et simpelt array af skalarer ser præcis ud, som man ville forvente:

text
[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:

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

Den 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.

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

bash
npm install @toon-format/toon

Pakken eksporterer to funktioner — encode og 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}

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:

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-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.
  • Booleanertrue og false, samme som JSON.
  • Null — Skrevet som null for 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.
Er du usikker på, hvordan TOON sammenligner med din nuværende JSON-payload? Indsæt din JSON i JSON til TOON-konverteren, og værktøjet vil vise dig begge repræsentationer side om side sammen med en anslået tokenantal-sammenligning.

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.