Tanto JSON como TOON representan datos estructurados. Ambos están basados en texto. Ambos pueden describir objetos, arrays y jerarquías anidadas. Entonces si has descubierto TOON y te has preguntado si es solo otra alternativa JSON tratando de resolver un problema que no existe — es una pregunta válida. La respuesta es: están optimizados para trabajos completamente diferentes, y una vez que lo ves claramente, la elección se vuelve obvia.

JSON es el lenguaje universal de intercambio de datos. Ha sido la columna vertebral de las APIs REST durante más de una década, está soportado nativamente en todos los lenguajes de programación modernos, y es a lo que se recurre por defecto. TOON es un formato más reciente con una misión más estrecha: minimizar el uso de tokens cuando se pasan datos estructurados hacia y desde grandes modelos de lenguaje. Los mismos datos subyacentes, una huella radicalmente diferente.

Lo que hace grande a JSON

El superpoder de JSON es la ubicuidad. La especificación RFC 8259 es lo suficientemente simple como para caber en unas pocas páginas, razón por la cual todos los lenguajes desde Python hasta Go y Rust tienen un analizador JSON de primera clase en su biblioteca estándar o ecosistema. No necesitas instalar nada. No necesitas explicar el formato a tus colegas. Y las herramientas — formateadores, validadores, validadores de esquema — están universalmente disponibles.

  • Universalmente soportado. Todos los lenguajes, todos los runtimes, todos los servicios en la nube hablan JSON de forma nativa.
  • Legible por humanos. Las claves son cadenas entre comillas, la estructura es explícita con llaves y corchetes.
  • Primitivos tipados. Números, booleanos, nulls, cadenas, arrays y objetos — todos representados sin ambigüedad.
  • Herramientas ricas. Linters, formateadores, validadores JSON Schema, motores de consulta JSONPath — el ecosistema es enorme.
  • Estándar API REST. Content-Type: application/json es la expectativa predeterminada en prácticamente toda API HTTP.

Lo que hace diferente a TOON

TOON fue construido con una restricción específica en mente: las ventanas de contexto LLM y los costos de tokens. Cuando llamas a la API de OpenAI o cualquier otro proveedor LLM, pagas por token. Los tokens no son caracteres — son aproximadamente fragmentos de palabras, y la puntuación estructural de JSON (comillas, dos puntos, comas, llaves) consume un número sorprendente de ellos. Para datos tabulares especialmente, JSON es derrochador: cada fila repite cada nombre de clave.

TOON resuelve esto con una notación compacta. Para datos tabulares, las claves se declaran una vez en un encabezado, y las filas son valores simples separados por comas. Para objetos y arrays simples, usa una sintaxis en línea ligera. El tokenizador de OpenAI es una herramienta útil para ver la diferencia en la práctica — pega los mismos datos en ambos formatos y compara el recuento de tokens directamente.

Lado a lado: un dataset de 10 filas

Aquí hay una tabla de productos con 10 filas en JSON — el tipo de cosa que podrías pasarle a un LLM para pedirle que analice precios o categorice artículos:

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

Ahora los mismos datos en TOON. Las claves se declaran una vez en el encabezado — las filas contienen solo valores:

text
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,false
Ahorro de tokens en la práctica: La versión JSON anterior suma aproximadamente 420 tokens en el tokenizador de OpenAI. La versión TOON es aproximadamente 195 tokens — menos de la mitad. A escala (miles de llamadas API al día, o datasets con cientos de filas), esa brecha se convierte en dinero real.

Usar TOON en JavaScript / TypeScript

El paquete npm @toon-format/toon maneja la codificación y decodificación. Instálalo una vez y la API es sencilla:

bash
npm install @toon-format/toon
ts
import { 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"

También puedes codificar un solo objeto en línea. La notación de objeto TOON usa llaves sin entrecomillar claves, y su notación de array es simplemente valores separados por comas entre corchetes:

text
// TOON object
{name:Alice,age:30,role:admin}

// TOON array
[1,2,3,4,5]

Cuándo usar TOON

  • Prompts LLM con datos estructurados. Alimentar una tabla, lista de registros o catálogo de productos en una llamada GPT-4 / Claude / Gemini. El ahorro de tokens reduce directamente tu factura API.
  • Análisis de salida LLM. Si instruyes a un LLM para que responda en TOON, las respuestas son más cortas y más baratas en tokens de entrada y salida.
  • Datos tabulares específicamente. La estructura encabezado-una-vez-luego-filas de TOON es dramáticamente más compacta que JSON para cualquier cosa con forma de tabla.
  • Pipelines de procesamiento por lotes. ¿Ejecutas miles de registros a través de un LLM diariamente? Incluso una reducción del 40% en tokens se acumula rápidamente.
  • Presión en la ventana de contexto. Cuando estás chocando contra el límite de contexto de un modelo, TOON te permite meter más datos en la misma ventana.

Cuándo quedarse con JSON

  • APIs REST. Todos los clientes HTTP, todos los frameworks de servidor, todas las pasarelas API hablan JSON. No rompas la convención.
  • Archivos de configuración. package.json, tsconfig.json, settings.json — JSON es el estándar para la configuración en la mayoría de los ecosistemas.
  • Almacenamiento en base de datos. jsonb de PostgreSQL, documentos MongoDB, DynamoDB — estos son nativos JSON. TOON no pertenece aquí.
  • Comunicación entre servicios. Cuando dos servicios se comunican entre sí, usa JSON. Es lo que entienden tus herramientas de registro, rastreo y monitoreo.
  • APIs públicas. Si desarrolladores externos consumen tu API, JSON es el contrato esperado. TOON es una optimización interna, no un formato de interfaz público.
  • Análisis nativo del navegador. JSON.parse() está integrado en todos los navegadores. TOON requiere una biblioteca.

Guía de decisión

Una lista de verificación rápida para resolver la pregunta:

  • ¿Los datos van a un prompt LLM? Usa TOON.
  • ¿Se espera que el LLM devuelva datos estructurados? Usa TOON.
  • ¿Los datos son tabulares (mismas claves en muchas filas)? Considera fuertemente TOON.
  • ¿Es una solicitud o respuesta de API REST? Usa JSON.
  • ¿Es un archivo de configuración? Usa JSON (o YAML).
  • ¿Está almacenado en una base de datos? Usa JSON.
  • ¿Herramientas que no son LLM consumirán estos datos? Usa JSON.
  • ¿No estás seguro de si los costos de tokens importan para tu caso de uso? Empieza con JSON, optimiza después.

Herramientas útiles

Si trabajas con ambos formatos, estas herramientas te ahorrarán tiempo. Usa el convertidor JSON a TOON para tomar datos JSON existentes y producir una representación TOON compacta lista para entrada LLM. El convertidor TOON a JSON va en la otra dirección — útil cuando un LLM devuelve TOON y necesitas alimentar el resultado en un sistema descendente nativo de JSON. El formateador TOON limpiará y validará cadenas TOON, y el formateador JSON sigue siendo la herramienta para embellecer blobs JSON crudos.

Resumen

JSON y TOON no son competidores en el sentido tradicional — apuntan a diferentes partes de tu stack. JSON posee la capa API, los archivos de configuración y el almacenamiento de datos. TOON posee la capa LLM, donde el recuento de tokens es dinero y el espacio de la ventana de contexto es precioso. La buena noticia es que puedes usar ambos en el mismo proyecto sin fricción: almacena y transfiere datos como JSON, codifica a TOON inmediatamente antes de cualquier llamada LLM, y decodifica de vuelta a JSON o un objeto nativo a la salida. Una vez que hayas configurado ese patrón, el ahorro de tokens es automático.