Både JSON och TOON representerar strukturerad data. Båda är textbaserade. Båda kan beskriva objekt, arrayer och nästlade hierarkier. Så om du har snubblat över TOON och undrat om det bara är ännu ett JSON-alternativ som försöker lösa ett problem som inte finns — det är en rättvis fråga. Svaret är: de är optimerade för helt olika jobb, och när du väl ser det utlagt, blir valet uppenbart.
JSON är det universella språket för datautbyte. Det har varit ryggraden i REST API:er i mer än ett decennium, är stödd inbyggt i varje modernt programmeringsspråk och är det du sträcker dig efter som standard. TOON är ett nyare format med ett smalare uppdrag: minimera tokenanvändning när du skickar strukturerad data till och från stora språkmodeller. Samma underliggande data, radikalt annorlunda fotavtryck.
Vad som gör JSON bra
JSONs superkraft är universalitet. Specifikationen RFC 8259 är enkel nog att passa på några sidor, vilket är varför varje språk från Python till Go till Rust har en förstklassig JSON-parser i sitt standardbibliotek eller ekosystem. Du behöver inte installera något. Du behöver inte förklara formatet för dina kollegor. Och verktyg — formaterare, validerare, schemavaliderare — är universellt tillgängliga.
- Universellt stödd. Varje språk, varje körningsmiljö, varje molntjänst talar JSON inbyggt.
- Läsbar för människor. Nycklar är citerade strängar, struktur är explicit med klamrar och hakparenteser.
- Typade primitiver. Tal, booleaner, nollor, strängar, arrayer och objekt — alla utan tvetydighet representerade.
- Rika verktyg. Linters, formaterare, JSON Schema-validerare, JSONPath-frågemotorer — ekosystemet är enormt.
- REST API-standard.
Content-Type: application/jsonär standardförväntningen i nästan varje HTTP API.
Vad som gör TOON annorlunda
TOON byggdes med en specifik begränsning i åtanke: LLM-kontextfönster och tokenkostnader. När du anropar OpenAI API eller någon annan LLM-leverantör, betalar du per token. Tokens är inte tecken — de är ungefär orddelar, och JSONs strukturella interpunktion (citationstecken, kolon, kommatecken, klamrar) förbrukar ett överraskande antal av dem. För tabelldata är JSON särskilt slösaktigt: varje rad upprepar varje nyckelnamn.
TOON löser detta med en kompakt notation. För tabelldata deklareras nycklar en gång i en rubrik och rader är enkla kommaseparerade värden. För enskilda objekt och arrayer används en smal inline-syntax. OpenAI-tokeniseraren är ett användbart verktyg för att se skillnaden i praktiken — klistra in samma data i båda formaten och jämför tokenantalet direkt.
Sida vid sida: 10-raders dataset
Här är en produkttabell med 10 rader i JSON — det slag av sak du kanske skickar till ett LLM för att be det analysera prissättning eller kategorisera artiklar:
[
{"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 samma data i TOON. Nycklar deklareras en gång i rubriken — rader innehåller bara värden:
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,falseAnvända TOON i JavaScript / TypeScript
npm-paketet
@toon-format/toon
hanterar kodning och avkodning. Installera det en gång och API:et är enkelt:
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 också koda ett enskilt objekt inline. TOONs objektnotation använder klamrar utan att citera nycklar, och dess arraynotation är helt enkelt kommaseparerade värden i hakparenteser:
// TOON object
{name:Alice,age:30,role:admin}
// TOON array
[1,2,3,4,5]När man ska använda TOON
- LLM-prompter med strukturerad data. Mata in en tabell, lista med poster eller produktkatalog i ett GPT-4 / Claude / Gemini-anrop. Tokenbesparingarna minskar direkt din API-räkning.
- LLM-utdataparsning. Om du instruerar ett LLM att svara i TOON, är svaren kortare och billigare på både inmatnings- och utmatningstoken.
- Tabelldata specifikt. TOONs rubrik-en-gång-sedan-rader-struktur är dramatiskt mer kompakt än JSON för allt som är formformat.
- Batchbearbetningspipelines. Kör tusentals poster genom ett LLM dagligen? Även en 40% tokenreduktion lägger upp sig snabbt.
- Kontextfönsterstryck. När du stöter mot en modells kontextgräns, låter TOON dig passa in mer data i samma fönster.
När man ska hålla sig till JSON
- REST API:er. Varje HTTP-klient, varje serverramverk, varje API-gateway talar JSON. Bryt inte konventionen.
- Konfigurationsfiler.
package.json,tsconfig.json,settings.json— JSON är standarden för konfiguration i de flesta ekosystem. - Databaslagring. PostgreSQLs
jsonb, MongoDB-dokument, DynamoDB — dessa är JSON-inbyggda. TOON hör inte hemma här. - Tjänst-till-tjänst-kommunikation. När två tjänster pratar med varandra, använd JSON. Det är vad dina loggnings-, spårnings- och övervakningsverktyg förstår.
- Publika API:er. Om externa utvecklare konsumerar ditt API är JSON det förväntade kontraktet. TOON är en intern optimering, inte ett publikt gränssnittsformat.
- Webbläsarens inbyggda parsning.
JSON.parse()är inbyggd i varje webbläsare. TOON kräver ett bibliotek.
Beslutsguide
En snabb checklista för att avgöra frågan:
- Går data in i en LLM-prompt? Använd TOON.
- Förväntas LLM:et returnera strukturerad data? Använd TOON.
- Är data tabellformat (samma nycklar över många rader)? Överväg starkt TOON.
- Är detta en REST API-förfrågan eller svar? Använd JSON.
- Är detta en konfigurationsfil? Använd JSON (eller YAML).
- Lagras detta i en databas? Använd JSON.
- Kommer icke-LLM-verktyg att konsumera dessa data? Använd JSON.
- Är du osäker på om tokenkostnader spelar roll för ditt användningsfall? Börja med JSON, optimera senare.
Användbara verktyg
Om du arbetar med båda formaten kommer dessa verktyg att spara tid. Använd JSON till TOON-konverteraren för att ta befintliga JSON-data och producera en kompakt TOON-representation redo för LLM-inmatning. TOON till JSON-konverteraren går åt andra hållet — användbar när ett LLM returnerar TOON och du behöver mata resultatet in i ett JSON-inbyggt nedströmssystem. TOON Formatter rensar och validerar TOON-strängar, och JSON Formatter förblir att gå till för att söta råa JSON-klumpar.
Sammanfattning
JSON och TOON är inte konkurrenter i traditionell mening — de riktar sig mot olika delar av ditt stack. JSON äger API-lagret, konfigurationsfiler och datalagring. TOON äger LLM-lagret, där tokenantal är pengar och kontextfönsterutrymme är dyrt. Det goda med det är att du kan använda båda i samma projekt utan friktion: lagra och överför data som JSON, koda till TOON omedelbart före varje LLM-anrop och avkoda tillbaka till JSON eller ett inbyggt objekt på vägen ut. När du väl har ställt in det mönstret är tokenbesparingarna automatiska.