Sia JSON che TOON rappresentano dati strutturati. Entrambi sono basati su testo. Entrambi possono descrivere oggetti, array e gerarchie annidate. Quindi se hai scoperto TOON per caso e ti sei chiesto se fosse solo un'altra alternativa a JSON che cerca di risolvere un problema che non esiste — è una domanda legittima. La risposta è: sono ottimizzati per lavori completamente diversi, e una volta che lo si vede descritto chiaramente, la scelta diventa ovvia.
JSON è il linguaggio universale dello scambio di dati. È stato la spina dorsale delle API REST per oltre un decennio, è supportato nativamente in ogni moderno linguaggio di programmazione, ed è quello a cui ci si rivolge per default. TOON è un formato più recente con una missione più ristretta: ridurre al minimo l'utilizzo di token quando si passano dati strutturati da e verso i modelli linguistici di grandi dimensioni. Stessi dati sottostanti, impronta radicalmente diversa.
Cosa rende JSON eccellente
Il superpotere di JSON è l'ubiquità. La specifica RFC 8259 è abbastanza semplice da stare in poche pagine, motivo per cui ogni linguaggio, da Python a Go a Rust, ha un parser JSON di prima classe nella sua libreria standard o ecosistema. Non è necessario installare nulla. Non è necessario spiegare il formato ai colleghi. E gli strumenti — formattatori, validatori, validatori di schema — sono universalmente disponibili.
- Universalmente supportato. Ogni linguaggio, ogni runtime, ogni servizio cloud parla JSON nativamente.
- Leggibile dall'uomo. Le chiavi sono stringhe quotate, la struttura è esplicita con parentesi graffe e quadre.
- Primitivi tipizzati. Numeri, booleani, null, stringhe, array e oggetti — tutti rappresentati in modo non ambiguo.
- Ricco ecosistema di strumenti. Linter, formattatori, validatori JSON Schema, motori di query JSONPath — l'ecosistema è enorme.
- Standard per le API REST.
Content-Type: application/jsonè l'aspettativa predefinita in praticamente ogni API HTTP.
Cosa rende TOON diverso
TOON è stato costruito con un vincolo specifico in mente: le finestre di contesto LLM e i costi dei token. Quando si chiama l'API OpenAI o qualsiasi altro provider LLM, si paga per token. I token non sono caratteri — sono approssimativamente frammenti di parole, e la punteggiatura strutturale di JSON (virgolette, due punti, virgole, parentesi graffe) ne consuma un numero sorprendente. Per i dati tabulari in particolare, JSON è dispendioso: ogni riga ripete ogni nome di chiave.
TOON risolve questo problema con una notazione compatta. Per i dati tabulari, le chiavi vengono dichiarate una volta in un' intestazione, e le righe sono semplici valori separati da virgole. Per singoli oggetti e array, utilizza una sintassi inline snella. Lo strumento di tokenizzazione OpenAI è utile per vedere la differenza in pratica — incolla gli stessi dati in entrambi i formati e confronta direttamente il conteggio dei token.
Confronto affiancato: dataset di 10 righe
Ecco una tabella di prodotti con 10 righe in JSON — il tipo di cosa che potresti passare a un LLM per chiedergli di analizzare i prezzi o categorizzare gli articoli:
[
{"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}
]Ora gli stessi dati in TOON. Le chiavi vengono dichiarate una volta nell'intestazione — le righe contengono solo valori:
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,falseUtilizzo di TOON in JavaScript / TypeScript
Il
pacchetto npm @toon-format/toon
gestisce la codifica e la decodifica. Installalo una volta e l'API è semplice:
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"È anche possibile codificare un singolo oggetto inline. La notazione degli oggetti di TOON usa le parentesi graffe senza quotare le chiavi, e la sua notazione degli array è semplicemente valori separati da virgole tra parentesi quadre:
// TOON object
{name:Alice,age:30,role:admin}
// TOON array
[1,2,3,4,5]Quando usare TOON
- Prompt LLM con dati strutturati. Alimentare una tabella, un elenco di record o un catalogo di prodotti in una chiamata GPT-4 / Claude / Gemini. Il risparmio di token riduce direttamente la fattura API.
- Analisi dell'output LLM. Se si istruisce un LLM a rispondere in TOON, le risposte sono più brevi ed economiche sia per i token di input che di output.
- Dati tabulari in particolare. La struttura intestazione-una-volta-poi-righe di TOON è notevolmente più compatta di JSON per qualsiasi cosa a forma di tabella.
- Pipeline di elaborazione batch. Si elaborano migliaia di record attraverso un LLM ogni giorno? Anche una riduzione del 40% dei token si accumula rapidamente.
- Pressione sulla finestra di contesto. Quando si sta raggiungendo il limite di contesto di un modello, TOON consente di inserire più dati nella stessa finestra.
Quando restare con JSON
- API REST. Ogni client HTTP, ogni framework server, ogni gateway API parla JSON. Non rompere la convenzione.
- File di configurazione.
package.json,tsconfig.json,settings.json— JSON è lo standard per la configurazione nella maggior parte degli ecosistemi. - Archiviazione nel database.
jsonbdi PostgreSQL, documenti MongoDB, DynamoDB — questi sono nativi JSON. TOON non appartiene qui. - Comunicazione inter-servizi. Quando due servizi comunicano tra loro, usa JSON. È quello che comprendono gli strumenti di logging, tracing e monitoraggio.
- API pubbliche. Se sviluppatori esterni consumano la tua API, JSON è il contratto atteso. TOON è un'ottimizzazione interna, non un formato di interfaccia pubblica.
- Analisi nativa del browser.
JSON.parse()è integrato in ogni browser. TOON richiede una libreria.
Guida alle decisioni
Una rapida checklist per risolvere la questione:
- I dati vanno in un prompt LLM? Usa TOON.
- L'LLM dovrebbe restituire dati strutturati? Usa TOON.
- I dati sono tabulari (stesse chiavi su molte righe)? Considera seriamente TOON.
- Si tratta di una richiesta o risposta API REST? Usa JSON.
- Si tratta di un file di configurazione? Usa JSON (o YAML).
- È archiviato in un database? Usa JSON.
- Strumenti non-LLM consumeranno questi dati? Usa JSON.
- Non sei sicuro che i costi dei token siano importanti per il tuo caso d'uso? Inizia con JSON, ottimizza dopo.
Strumenti utili
Se stai lavorando con entrambi i formati, questi strumenti ti faranno risparmiare tempo. Usa il convertitore da JSON a TOON per prendere i dati JSON esistenti e produrre una rappresentazione TOON compatta pronta per l'input LLM. Il convertitore da TOON a JSON va nell'altra direzione — utile quando un LLM restituisce TOON e hai bisogno di alimentare il risultato in un sistema downstream nativo JSON. Il Formattatore TOON pulisce e valida le stringhe TOON, e il Formattatore JSON rimane il punto di riferimento per abbellire i blob JSON grezzi.
Conclusioni
JSON e TOON non sono concorrenti nel senso tradizionale — si rivolgono a parti diverse del tuo stack. JSON possiede il livello API, i file di configurazione e l'archiviazione dei dati. TOON possiede il livello LLM, dove il conteggio dei token è denaro e lo spazio della finestra di contesto è prezioso. La buona notizia è che puoi usare entrambi nello stesso progetto senza attrito: archivia e trasferisci i dati come JSON, codifica in TOON immediatamente prima di qualsiasi chiamata LLM, e decodifica di nuovo in JSON o un oggetto nativo in uscita. Una volta impostato quel pattern, il risparmio di token è automatico.