JSON et TOON représentent tous deux des données structurées. Tous deux sont basés sur du texte. Tous deux peuvent décrire des objets, des tableaux et des hiérarchies imbriquées. Donc si vous avez découvert TOON et vous vous êtes demandé si c'est juste une autre alternative JSON essayant de résoudre un problème qui n'existe pas — c'est une question légitime. La réponse est : ils sont optimisés pour des tâches complètement différentes, et une fois que vous le voyez clairement, le choix devient évident.
JSON est le langage universel d'échange de données. Il est la colonne vertébrale des API REST depuis plus d'une décennie, il est pris en charge nativement dans tous les langages de programmation modernes, et c'est ce qu'on utilise par défaut. TOON est un format plus récent avec une mission plus étroite : minimiser l'utilisation des tokens lors du passage de données structurées vers et depuis les grands modèles de langage. Mêmes données sous-jacentes, empreinte radicalement différente.
Ce qui rend JSON excellent
Le superpouvoir de JSON est son ubiquité. La spécification RFC 8259 est assez simple pour tenir sur quelques pages, c'est pourquoi tous les langages de Python à Go en passant par Rust ont un analyseur JSON de première classe dans leur bibliothèque standard ou leur écosystème. Vous n'avez rien à installer. Vous n'avez pas à expliquer le format à vos collègues. Et les outils — formateurs, validateurs, validateurs de schéma — sont universellement disponibles.
- Universellement pris en charge. Tous les langages, tous les runtimes, tous les services cloud parlent JSON nativement.
- Lisible par l'homme. Les clés sont des chaînes entre guillemets, la structure est explicite avec des accolades et des crochets.
- Primitives typées. Nombres, booléens, nulls, chaînes, tableaux et objets — tous représentés de manière non ambiguë.
- Riche outillage. Linters, formateurs, validateurs JSON Schema, moteurs de requête JSONPath — l'écosystème est énorme.
- Standard API REST.
Content-Type: application/jsonest l'attente par défaut dans pratiquement toutes les API HTTP.
Ce qui rend TOON différent
TOON a été construit avec une contrainte spécifique en tête : les fenêtres de contexte LLM et les coûts de tokens. Lorsque vous appelez l'API OpenAI ou tout autre fournisseur LLM, vous payez par token. Les tokens ne sont pas des caractères — ce sont approximativement des fragments de mots, et la ponctuation structurelle de JSON (guillemets, deux-points, virgules, accolades) en consomme un nombre surprenant. Pour les données tabulaires notamment, JSON est gaspilleur : chaque ligne répète chaque nom de clé.
TOON résout cela avec une notation compacte. Pour les données tabulaires, les clés sont déclarées une fois dans un en-tête, et les lignes sont de simples valeurs séparées par des virgules. Pour les objets et tableaux simples, il utilise une syntaxe en ligne légère. Le tokeniseur OpenAI est un outil utile pour voir la différence en pratique — collez les mêmes données dans les deux formats et comparez directement le nombre de tokens.
Côte à côte : un dataset de 10 lignes
Voici un tableau de produits avec 10 lignes en JSON — le genre de chose que vous pourriez passer à un LLM pour lui demander d'analyser les prix ou catégoriser les articles :
[
{"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}
]Maintenant les mêmes données en TOON. Les clés sont déclarées une fois dans l'en-tête — les lignes contiennent uniquement des valeurs :
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,falseUtiliser TOON en JavaScript / TypeScript
Le
package npm @toon-format/toon
gère l'encodage et le décodage. Installez-le une fois et l'API est simple :
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"Vous pouvez également encoder un seul objet en ligne. La notation d'objet TOON utilise des accolades sans mettre les clés entre guillemets, et sa notation de tableau est simplement des valeurs séparées par des virgules entre crochets :
// TOON object
{name:Alice,age:30,role:admin}
// TOON array
[1,2,3,4,5]Quand utiliser TOON
- Prompts LLM avec données structurées. Alimenter un tableau, une liste d'enregistrements ou un catalogue de produits dans un appel GPT-4 / Claude / Gemini. Les économies de tokens réduisent directement votre facture API.
- Analyse des sorties LLM. Si vous instruisez un LLM à répondre en TOON, les réponses sont plus courtes et moins chères en tokens d'entrée et de sortie.
- Données tabulaires spécifiquement. La structure en-tête-une-fois-puis-lignes de TOON est dramatiquement plus compacte que JSON pour tout ce qui a une forme tabulaire.
- Pipelines de traitement par lots. Vous traitez des milliers d'enregistrements par un LLM quotidiennement ? Même une réduction de 40% des tokens s'accumule rapidement.
- Pression sur la fenêtre de contexte. Lorsque vous butez contre la limite de contexte d'un modèle, TOON vous permet de faire rentrer plus de données dans la même fenêtre.
Quand rester avec JSON
- API REST. Chaque client HTTP, chaque framework serveur, chaque passerelle API parle JSON. Ne brisez pas la convention.
- Fichiers de configuration.
package.json,tsconfig.json,settings.json— JSON est le standard pour la config dans la plupart des écosystèmes. - Stockage en base de données.
jsonbde PostgreSQL, documents MongoDB, DynamoDB — ceux-ci sont natifs JSON. TOON n'a pas sa place ici. - Communication inter-services. Quand deux services se parlent, utilisez JSON. C'est ce que vos outils de journalisation, de traçage et de surveillance comprennent.
- APIs publiques. Si des développeurs externes consomment votre API, JSON est le contrat attendu. TOON est une optimisation interne, pas un format d'interface public.
- Analyse native du navigateur.
JSON.parse()est intégré dans chaque navigateur. TOON nécessite une bibliothèque.
Guide de décision
Une liste de vérification rapide pour régler la question :
- Les données vont-elles dans un prompt LLM ? Utilisez TOON.
- Le LLM doit-il retourner des données structurées ? Utilisez TOON.
- Les données sont-elles tabulaires (mêmes clés sur de nombreuses lignes) ? Considérez fortement TOON.
- S'agit-il d'une requête ou réponse API REST ? Utilisez JSON.
- S'agit-il d'un fichier de configuration ? Utilisez JSON (ou YAML).
- Est-ce stocké dans une base de données ? Utilisez JSON.
- Des outils non-LLM vont-ils consommer ces données ? Utilisez JSON.
- Vous ne savez pas si les coûts de tokens comptent pour votre cas d'utilisation ? Commencez avec JSON, optimisez plus tard.
Outils utiles
Si vous travaillez avec les deux formats, ces outils vous feront gagner du temps. Utilisez le convertisseur JSON vers TOON pour prendre des données JSON existantes et produire une représentation TOON compacte prête pour l'entrée LLM. Le convertisseur TOON vers JSON va dans l'autre direction — utile quand un LLM retourne du TOON et que vous devez alimenter le résultat dans un système aval natif JSON. Le formateur TOON nettoiera et validera les chaînes TOON, et le formateur JSON reste la référence pour embellir les blobs JSON bruts.
En résumé
JSON et TOON ne sont pas des concurrents au sens traditionnel — ils ciblent différentes parties de votre stack. JSON possède la couche API, les fichiers de configuration et le stockage de données. TOON possède la couche LLM, où le nombre de tokens c'est de l'argent et l'espace de la fenêtre de contexte est précieux. La bonne nouvelle c'est que vous pouvez utiliser les deux dans le même projet sans friction : stockez et transférez les données en JSON, encodez en TOON immédiatement avant tout appel LLM, et décodez en JSON ou en objet natif à la sortie. Une fois que vous avez mis en place ce pattern, les économies de tokens sont automatiques.