TOON Cheatsheet
Token-Oriented Object Notation, es un formato compacto pensado para reducir el consumo de tokens al trabajar con LLMs.
En comparación con JSON, utilizar TOON puede ahorrar entre un 30% y un 60% de tokens, lo que supone un ahorro enorme a la hora de tratar con modelos de Inteligencia Artificial Generativa de pago.
1. Conceptos básicos
TOON elimina llaves y comillas en muchas ocasiones, utiliza indentación para anidar y un esquema tabular para arrays homogéneos. Su potencia aparece cuando trabajas con arrays de objetos que comparten las mismas claves: declaras el esquema una vez y listan filas de valores.
- Clave y valor:
key: value - Anidación: indentación (dos espacios recomendados)
- Arrays simples:
name[N]:seguido de N líneas - Arrays de objetos homogéneos:
arr[N]{k1,k2}:seguido de N filas con valores separados por comas
- Cuando los objetos del array tienen claves distintas.
- Estructuras extremadamente heterogéneas o arbitrarias.
- Si necesitas compatibilidad inmediata con APIs que aceptan sólo JSON.
2. Tipos de datos
JSON vs TOON: la semántica es la misma. Ejemplos:
{
"active": true,
"count": 42,
"nickname": null,
"name": "Ana"
}
active: true count: 42 nickname: null name: Ana
3. Arrays simples
TOON declara la longitud del array: key[N]:. Útil para que el lector (o LLM) sepa cuántos elementos vienen.
{
"colors": ["red", "green", "blue"]
}
colors[3]: red green blue
{
"items": []
}
items[0]:
4. Arrays de objetos
En arrays homogéneos (todos los objetos comparten la misma estructura), TOON evita repetir claves: declaras el esquema y luego las filas de valores.
{
"users": [
{ "id": 1, "name": "Alice", "role": "admin" },
{ "id": 2, "name": "Bob", "role": "user" }
]
}
users[2]{id,name,role}:
1,Alice,admin
2,Bob,user
Notas:
- [2] indica que hay 2 elementos.
- {id,name,role} es el esquema: todas las filas siguen ese orden.
- Las filas usan
,como separador — no hace falta repetir las claves.
{
"products": [
{ "id": 1, "name": "Tomato", "price": 1.2 },
{ "id": 2, "name": "Onion", "price": 0.8 },
{ "id": 3, "name": "Bread", "price": 1.5 }
]
}
products[3]{id,name,price}:
1,Tomato,1.2
2,Onion,0.8
3,Bread,1.5
5. Anidación y objetos anidados
Si un campo del esquema es un objeto, puedes abrir una indentación después del valor y representar su contenido normalmente.
{
"orders": [
{
"id": 10,
"items": [
{ "sku": "A1", "qty": 2 },
{ "sku": "B9", "qty": 1 }
]
}
]
}
orders[1]{id,items}:
10:
items[2]{sku,qty}:
A1,2
B9,1
Observación: cuando un valor del esquema es a su vez un objeto/array, pon el nombre de ese campo, dos puntos y abre indentación. Puedes mezclar el formato tabular con objetos anidados.
{
"products": [
{ "id": 1, "meta": { "category": "fruit", "price": 1.2 } },
{ "id": 2, "meta": { "category": "veg", "price": 0.8 } }
]
}
products[2]{id,meta}:
1:
category: fruit
price: 1.2
2:
category: veg
price: 0.8
6. Strings especiales y comentarios
Puedes omitir comillas para strings simples. Usa comillas cuando el string contenga comas, dos puntos, llaves o corchetes que puedan confundir el parser.
{
"title": "Hello, world!",
"note": "Value: 10",
"author": "Anna"
}
title: "Hello, world!" note: "Value: 10" author: Ana
Comentarios
Al contrario que en JSON, en TOON podemos utilizar comendatios utilizando la almohadilla (#)
# Esto es un comentario user: name: Ana # comentario en línea
