Введение
Разные форматы данных существуют потому, что решают разные задачи. JSON строгий и ориентирован на машины. YAML удобен для чтения. CSV минималистичен. TOON чрезвычайно компактен и специально спроектирован, чтобы снижать токенную нагрузку на LLM. TRON расширяет JSON определениями классов для обратно совместимого сжатия.
Зачем существуют эти форматы
TOON (Token-Oriented Object Notation) дает более компактный и токенно-эффективный способ передавать структурированные данные в большие языковые модели (LLM). Убирая лишние фигурные скобки, кавычки, квадратные скобки и запятые, TOON:
Снижает число токенов на 70-75%
Существенно уменьшает расходы на API
Сокращает задержку
Позволяет помещать более крупные наборы данных в лимиты контекста
Работает как слой преобразования, оптимизированный именно для входных данных ИИ
TRON (Token Reduced Object Notation) идет другим путем: расширяет JSON синтаксисом создания экземпляров классов:
Снижает число токенов на 20-40%
Сохраняет совместимость с JSON: любой JSON является валидным TRON
Убирает повторяющиеся имена полей в однородных массивах
Позволяет постепенно мигрировать с существующих JSON-процессов
Поддерживает вложенные определения классов для сложных структур
Что рассматривается в статье
В этом подробном сравнении разобраны 14 тестовых сценариев в нескольких категориях:
Базовые тесты:
Плоские структуры
Простые вложенные структуры
Расширенные вложенные структуры
Реальные сценарии:
Ответы API со смешанными типами данных
Конфигурационные файлы
Логи
Временные ряды
Пограничные случаи:
Специальные символы и экранирование
Обработка Unicode и эмодзи
Представление null и пустых значений
Структуры с большим количеством массивов:
Большие массивы примитивов
Матрицы и сетки: двумерные массивы
Сценарии, специфичные для LLM:
Фрагменты документов для RAG с метаданными
Схемы function calling
Few-shot-примеры для промптинга
Краткая сводка результатов
Рейтинг токенной эффективности: среднее по 14 тестам
Формат |
Эффективность относительно лучшего |
Сценарий |
|---|---|---|
CSV |
100% |
Только плоские данные |
TOON (табличный) |
92% |
Структурированные массивы |
TOON (объектный) |
85% |
Полная вложенность |
TRON |
75% |
JSON-совместимое сжатие |
YAML |
65% |
Человекочитаемость |
JSON |
45% |
Универсальная совместимость |
Влияние на стоимость: 10 тыс. записей, цены GPT-4
Формат |
Стоимость/вызов |
Годовая стоимость* |
Экономия относительно JSON |
|---|---|---|---|
JSON |
$5.60 |
$5.6M |
база |
YAML |
$3.33 |
$3.3M |
41% |
TRON |
$2.24 |
$2.24M |
60% |
TOON |
$1.38 |
$1.38M |
75% |
CSV |
$1.14 |
$1.14M |
80% |
*При 1 млн вызовов API в год
Влияние на окно контекста
При лимите 128 тыс. токенов (GPT-4):
JSON: ~17 тыс. записей
YAML: ~29 тыс. записей
TRON: ~45 тыс. записей: улучшение в 2,6 раза
TOON: ~70 тыс. записей: улучшение в 4 раза
CSV: ~85 тыс. записей
Тест 1: плоская структура — 10 пользователей
JSON — 746 символов
{ "users": [ { "id": 1, "name": "User1", "active": true }, { "id": 2, "name": "User2", "active": false }, { "id": 3, "name": "User3", "active": true }, { "id": 4, "name": "User4", "active": false }, { "id": 5, "name": "User5", "active": true }, { "id": 6, "name": "User6", "active": false }, { "id": 7, "name": "User7", "active": true }, { "id": 8, "name": "User8", "active": false }, { "id": 9, "name": "User9", "active": true }, { "id": 10, "name": "User10", "active": false } ] }
YAML — 444 символа
users: - id: 1 name: User1 active: true - id: 2 name: User2 active: false - id: 3 name: User3 active: true - id: 4 name: User4 active: false - id: 5 name: User5 active: true - id: 6 name: User6 active: false - id: 7 name: User7 active: true - id: 8 name: User8 active: false - id: 9 name: User9 active: true - id: 10 name: User10 active: false
TRON — 223 символа
class A: id,name,active {"users":[A(1,"User1",true),A(2,"User2",false),A(3,"User3",true),A(4,"User4",false),A(5,"User5",true),A(6,"User6",false),A(7,"User7",true),A(8,"User8",false),A(9,"User9",true),A(10,"User10",false)]}
CSV — 152 символа
id,name,active 1,User1,true 2,User2,false 3,User3,true 4,User4,false 5,User5,true 6,User6,false 7,User7,true 8,User8,false 9,User9,true 10,User10,false
TOON (табличный стиль) — 184 символа
users[10]{id,name,active}: 1,User1,true 2,User2,false 3,User3,true 4,User4,false 5,User5,true 6,User6,false 7,User7,true 8,User8,false 9,User9,true 10,User10,false
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
CSV |
152 |
100% |
80% |
TOON |
184 |
82.6% |
75% |
TRON |
223 |
68.2% |
70% |
YAML |
444 |
34.2% |
40% |
JSON |
746 |
20.4% |
— |
Победитель: CSV, но он ограничен плоскими данными
Тест 2: ответ API со смешанными типами данных
Реалистичный ответ API с числами, булевыми значениями, null, строками, датами и вложенными объектами.
JSON — 461 символ
{ "status": "success", "timestamp": "2024-01-15T14:30:00Z", "data": { "userId": 12345, "username": "john_doe", "email": "john@example.com", "premium": true, "subscription": null, "balance": 1234.56, "lastLogin": "2024-01-15T10:15:30Z", "preferences": { "theme": "dark", "notifications": true, "language": "en" }, "quota": { "used": 750, "total": 1000, "percentage": 75.0 } }, "errors": [] }
YAML — 341 символ
status: success timestamp: 2024-01-15T14:30:00Z data: userId: 12345 username: john_doe email: john@example.com premium: true subscription: null balance: 1234.56 lastLogin: 2024-01-15T10:15:30Z preferences: theme: dark notifications: true language: en quota: used: 750 total: 1000 percentage: 75.0 errors: []
TRON — 346 символов
{"status":"success","timestamp":"2024-01-15T14:30:00Z","data":{"userId":12345,"username":"john_doe","email":"john@example.com","premium":true,"subscription":null,"balance":1234.56,"lastLogin":"2024-01-15T10:15:30Z","preferences":{"theme":"dark","notifications":true,"language":"en"},"quota":{"used":750,"total":1000,"percentage":75}},"errors":[]}
TOON — 341 символ
response: status: success timestamp: 2024-01-15T14:30:00Z data: userId: 12345 username: john_doe email: john@example.com premium: true subscription: null balance: 1234.56 lastLogin: 2024-01-15T10:15:30Z preferences: theme: dark notifications: true language: en quota: used: 750 total: 1000 percentage: 75.0 errors: []
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TOON |
341 |
100% |
26% |
YAML |
341 |
100% |
26% |
TRON |
346 |
98.6% |
25% |
JSON |
461 |
74.0% |
— |
Победитель: ничья TOON/YAML. TRON почти догоняет их за счет компактного JSON-вывода
Тест 3: специальные символы и Unicode
Проверяем эмодзи, кириллицу, арабские и китайские символы, а также требования к экранированию.
JSON — 270 символов
{ "items": [ { "text": "Hello \"World\"", "path": "C:\\Users\\Documents", "emoji": "??✨", "quote": "She said: \"It's fine\"" }, { "text": "Line 1\nLine 2\nLine 3", "special": "Tab:\there", "unicode": "Привет 世界 مرحبا", "empty": "" } ] }
YAML — 240 символов
items: - text: 'Hello "World"' path: 'C:\Users\Documents' emoji: ??✨ quote: "She said: \"It's fine\"" - text: | Line 1 Line 2 Line 3 special: "Tab:\there" unicode: Привет 世界 مرحبا empty: ''
TRON — 214 символов
{"items":[{"text":"Hello \"World\"","path":"C:\\Users\\Documents","emoji":"??✨","quote":"She said: \"It's fine\""},{"text":"Line 1\nLine 2\nLine 3","special":"Tab:\there","unicode":"Привет 世界 مرحبا","empty":""}]}
TOON — 219 символов
items[2]: text: Hello "World" path: C:\Users\Documents emoji: ??✨ quote: She said: "It's fine" --- text: Line 1\nLine 2\nLine 3 special: Tab:\there unicode: Привет 世界 مرحبا empty: ~
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TRON |
214 |
100% |
21% |
TOON |
219 |
97.7% |
19% |
YAML |
240 |
89.2% |
11% |
JSON |
270 |
79.3% |
— |
Победитель: TRON. Компактный JSON без пробелов обходит всех
Тест 4: большие массивы примитивов
Проверяем массив из 20 чисел, булевы флаги и строковые теги.
JSON — 244 символа
{ "numbers": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20], "flags": [true, false, true, true, false, false, true, false, true, true], "tags": ["urgent", "review", "bug", "feature", "enhancement", "documentation"] }
YAML — 207 символов
numbers: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20] flags: [true, false, true, true, false, false, true, false, true, true] tags: [urgent, review, bug, feature, enhancement, documentation]
TRON — 201 символ
{"numbers":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],"flags":[true,false,true,true,false,false,true,false,true,true],"tags":["urgent","review","bug","feature","enhancement","documentation"]}
TOON — 181 символ
numbers[20]: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 flags[10]: true,false,true,true,false,false,true,false,true,true tags[6]: urgent,review,bug,feature,enhancement,documentation
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TOON |
181 |
100% |
26% |
TRON |
201 |
90.0% |
18% |
YAML |
207 |
87.4% |
15% |
JSON |
244 |
74.2% |
— |
Победитель: TOON. Специализированный inline-синтаксис массивов выигрывает у JSON-совместимости
Тест 5: временные ряды
Типичный паттерн для мониторинга, аналитики и IoT-приложений.
JSON — 358 символов
{ "metrics": [ {"timestamp": "2024-01-15T00:00:00Z", "value": 42.5, "status": "ok"}, {"timestamp": "2024-01-15T01:00:00Z", "value": 43.1, "status": "ok"}, {"timestamp": "2024-01-15T02:00:00Z", "value": 41.8, "status": "ok"}, {"timestamp": "2024-01-15T03:00:00Z", "value": 44.2, "status": "warning"}, {"timestamp": "2024-01-15T04:00:00Z", "value": 45.0, "status": "warning"} ] }
YAML — 311 символов
metrics: - timestamp: 2024-01-15T00:00:00Z value: 42.5 status: ok - timestamp: 2024-01-15T01:00:00Z value: 43.1 status: ok - timestamp: 2024-01-15T02:00:00Z value: 41.8 status: ok - timestamp: 2024-01-15T03:00:00Z value: 44.2 status: warning - timestamp: 2024-01-15T04:00:00Z value: 45.0 status: warning
TRON — 234 символа
class A: timestamp,value,status {"metrics":[A("2024-01-15T00:00:00Z",42.5,"ok"),A("2024-01-15T01:00:00Z",43.1,"ok"),A("2024-01-15T02:00:00Z",41.8,"ok"),A("2024-01-15T03:00:00Z",44.2,"warning"),A("2024-01-15T04:00:00Z",45,"warning")]}
CSV — 193 символа
timestamp,value,status 2024-01-15T00:00:00Z,42.5,ok 2024-01-15T01:00:00Z,43.1,ok 2024-01-15T02:00:00Z,41.8,ok 2024-01-15T03:00:00Z,44.2,warning 2024-01-15T04:00:00Z,45.0,warning
TOON — 202 символа
metrics[5]{timestamp,value,status}: 2024-01-15T00:00:00Z,42.5,ok 2024-01-15T01:00:00Z,43.1,ok 2024-01-15T02:00:00Z,41.8,ok 2024-01-15T03:00:00Z,44.2,warning 2024-01-15T04:00:00Z,45.0,warning
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
CSV |
193 |
100% |
46% |
TOON |
202 |
95.5% |
44% |
TRON |
234 |
82.5% |
35% |
YAML |
311 |
62.1% |
13% |
JSON |
358 |
53.9% |
— |
Победитель: CSV, но TOON почти догоняет его и при этом лучше сохраняет структуру
Тест 6: фрагменты документов для RAG
LLM-специфичный сценарий: паттерн Retrieval-Augmented Generation с текстовыми фрагментами и метаданными.
JSON — 493 символа
{ "chunks": [ { "id": "doc1_chunk1", "text": "Large Language Models are transforming how we interact with computers.", "metadata": { "source": "ai_overview.pdf", "page": 1, "confidence": 0.95 } }, { "id": "doc1_chunk2", "text": "Token efficiency is crucial for cost management in production systems.", "metadata": { "source": "ai_overview.pdf", "page": 2, "confidence": 0.92 } } ] }
YAML — 365 символов
chunks: - id: doc1_chunk1 text: Large Language Models are transforming how we interact with computers. metadata: source: ai_overview.pdf page: 1 confidence: 0.95 - id: doc1_chunk2 text: Token efficiency is crucial for cost management in production systems. metadata: source: ai_overview.pdf page: 2 confidence: 0.92
TRON — 307 символов
class A: id,text,metadata class B: source,page,confidence {"chunks":[A("doc1_chunk1","Large Language Models are transforming how we interact with computers.",B("ai_overview.pdf",1,0.95)),A("doc1_chunk2","Token efficiency is crucial for cost management in production systems.",B("ai_overview.pdf",2,0.92))]}
TOON — 351 символ
chunks[2]: id: doc1_chunk1 text: Large Language Models are transforming how we interact with computers. metadata: source: ai_overview.pdf page: 1 confidence: 0.95 --- id: doc1_chunk2 text: Token efficiency is crucial for cost management in production systems. metadata: source: ai_overview.pdf page: 2 confidence: 0.92
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TRON |
307 |
100% |
38% |
TOON |
351 |
87.5% |
29% |
YAML |
365 |
84.1% |
26% |
JSON |
493 |
62.3% |
— |
Победитель: TRON. Вложенные определения классов отлично работают с однородными вложенными структурами
Тест 7: схема function calling
LLM-специфичный сценарий: определения функций в стиле OpenAI для использования инструментов.
JSON — 367 символов
{ "function": "get_weather", "description": "Get current weather for a location", "parameters": { "type": "object", "properties": { "location": { "type": "string", "description": "City name" }, "units": { "type": "string", "enum": ["celsius", "fahrenheit"], "default": "celsius" } }, "required": ["location"] } }
YAML — 257 символов
function: get_weather description: Get current weather for a location parameters: type: object properties: location: type: string description: City name units: type: string enum: [celsius, fahrenheit] default: celsius required: [location]
TRON — 280 символов
{"function":"get_weather","description":"Get current weather for a location","parameters":{"type":"object","properties":{"location":{"type":"string","description":"City name"},"units":{"type":"string","enum":["celsius","fahrenheit"],"default":"celsius"}},"required":["location"]}}
TOON — 248 символов
function: get_weather description: Get current weather for a location parameters: type: object properties: location: type: string description: City name units: type: string enum: celsius,fahrenheit default: celsius required: location
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TOON |
248 |
100% |
32% |
YAML |
257 |
96.5% |
30% |
TRON |
280 |
88.6% |
24% |
JSON |
367 |
67.6% |
— |
Победитель: TOON. Для схем функций он на 32% компактнее JSON
Тест 8: матрицы и сетки — двумерные массивы
Полезно для ML-признаков, игровых полей и табличных данных.
JSON — 99 символов
{ "matrix": [ [1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20] ] }
YAML — 85 символов
matrix: - [1, 2, 3, 4, 5] - [6, 7, 8, 9, 10] - [11, 12, 13, 14, 15] - [16, 17, 18, 19, 20]
TRON — 71 символ
{"matrix":[[1,2,3,4,5],[6,7,8,9,10],[11,12,13,14,15],[16,17,18,19,20]]}
CSV — 59 символов
c1,c2,c3,c4,c5 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20
TOON — 63 символа
matrix[4][5]: 1,2,3,4,5 6,7,8,9,10 11,12,13,14,15 16,17,18,19,20
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
CSV |
59 |
100% |
40% |
TOON |
63 |
93.7% |
36% |
TRON |
71 |
83.1% |
28% |
YAML |
85 |
69.4% |
14% |
JSON |
99 |
59.6% |
— |
Победитель: CSV, но TOON почти догоняет его благодаря двумерному синтаксису
Тест 9: null и пустые значения
Проверяем, как форматы обрабатывают отсутствующие данные. В реальных наборах данных это встречается постоянно.
JSON — 225 символов
{ "data": [ {"name": "Alice", "email": "alice@example.com", "phone": null, "age": 30}, {"name": "Bob", "email": null, "phone": "123-456", "age": null}, {"name": "Charlie", "email": "", "phone": "", "age": 25} ] }
YAML — 186 символов
data: - name: Alice email: alice@example.com phone: null age: 30 - name: Bob email: null phone: '123-456' age: null - name: Charlie email: '' phone: '' age: 25
TRON — 131 символ
class A: name,email,phone,age {"data":[A("Alice","alice@example.com",null,30),A("Bob",null,"123-456",null),A("Charlie","","",25)]}
CSV — 87 символов
name,email,phone,age Alice,alice@example.com,,30 Bob,,123-456, Charlie,,,25
TOON — 107 символов
data[3]{name,email,phone,age}: Alice,alice@example.com,~,30 Bob,~,123-456,~ Charlie,,,25
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
CSV |
87 |
100% |
61% |
TOON |
107 |
81.3% |
52% |
TRON |
131 |
66.4% |
42% |
YAML |
186 |
46.8% |
17% |
JSON |
225 |
38.7% |
— |
Победитель: CSV. TOON последовательно использует ~ для null
Тест 10: few-shot-примеры для промптинга
LLM-специфичный сценарий: пары вход-выход для промпт-инжиниринга.
JSON — 259 символов
{ "examples": [ { "input": "Classify: This product is amazing!", "output": "positive" }, { "input": "Classify: Terrible experience, would not recommend.", "output": "negative" }, { "input": "Classify: It's okay, nothing special.", "output": "neutral" } ] }
YAML — 207 символов
examples: - input: 'Classify: This product is amazing!' output: positive - input: 'Classify: Terrible experience, would not recommend.' output: negative - input: "Classify: It's okay, nothing special." output: neutral
TRON — 209 символов
class A: input,output {"examples":[A("Classify: This product is amazing!","positive"),A("Classify: Terrible experience, would not recommend.","negative"),A("Classify: It's okay, nothing special.","neutral")]}
TOON — 178 символов
examples[3]{input,output}: Classify: This product is amazing!,positive Classify: Terrible experience would not recommend.,negative Classify: It's okay nothing special.,neutral
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TOON |
178 |
100% |
31% |
YAML |
207 |
86.0% |
20% |
TRON |
209 |
85.2% |
19% |
JSON |
259 |
68.7% |
— |
Победитель: TOON. Для few-shot-примеров он на 31% компактнее JSON
Тест 11: конфигурационный файл
Многоуровневые настройки приложения — распространенный реальный сценарий.
JSON — 349 символов
{ "app": { "name": "MyApp", "version": "1.0.0", "debug": false, "server": { "host": "0.0.0.0", "port": 8080, "timeout": 30 }, "database": { "host": "localhost", "port": 5432, "name": "mydb", "pool": { "min": 2, "max": 10 } }, "features": { "auth": true, "cache": true, "logging": true } } }
YAML — 273 символа
app: name: MyApp version: 1.0.0 debug: false server: host: 0.0.0.0 port: 8080 timeout: 30 database: host: localhost port: 5432 name: mydb pool: min: 2 max: 10 features: auth: true cache: true logging: true
TRON — 246 символов
{"app":{"name":"MyApp","version":"1.0.0","debug":false,"server":{"host":"0.0.0.0","port":8080,"timeout":30},"database":{"host":"localhost","port":5432,"name":"mydb","pool":{"min":2,"max":10}},"features":{"auth":true,"cache":true,"logging":true}}}
TOON — 273 символа
app: name: MyApp version: 1.0.0 debug: false server: host: 0.0.0.0 port: 8080 timeout: 30 database: host: localhost port: 5432 name: mydb pool: min: 2 max: 10 features: auth: true cache: true logging: true
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
TRON |
246 |
100% |
30% |
TOON |
273 |
90.1% |
22% |
YAML |
273 |
90.1% |
22% |
JSON |
349 |
70.5% |
— |
Победитель: TRON. Компактный JSON выигрывает у YAML/TOON на неоднородных вложенных структурах
Тест 12: логи
Системные логи с временными метками, уровнями, сообщениями и переменными данными.
JSON — 384 символа
{ "logs": [ {"level": "INFO", "timestamp": "2024-01-15T10:00:00Z", "message": "Application started", "user_id": null}, {"level": "WARN", "timestamp": "2024-01-15T10:05:23Z", "message": "High memory usage detected", "user_id": 1234}, {"level": "ERROR", "timestamp": "2024-01-15T10:10:45Z", "message": "Database connection failed", "user_id": 5678}, {"level": "INFO", "timestamp": "2024-01-15T10:15:00Z", "message": "Connection restored", "user_id": null} ] }
YAML — 311 символов
logs: - level: INFO timestamp: 2024-01-15T10:00:00Z message: Application started user_id: null - level: WARN timestamp: 2024-01-15T10:05:23Z message: High memory usage detected user_id: 1234 - level: ERROR timestamp: 2024-01-15T10:10:45Z message: Database connection failed user_id: 5678 - level: INFO timestamp: 2024-01-15T10:15:00Z message: Connection restored user_id: null
TRON — 307 символов
class A: level,timestamp,message,user_id {"logs":[A("INFO","2024-01-15T10:00:00Z","Application started",null),A("WARN","2024-01-15T10:05:23Z","High memory usage detected",1234),A("ERROR","2024-01-15T10:10:45Z","Database connection failed",5678),A("INFO","2024-01-15T10:15:00Z","Connection restored",null)]}
CSV — 193 символа
level,timestamp,message,user_id INFO,2024-01-15T10:00:00Z,Application started, WARN,2024-01-15T10:05:23Z,High memory usage detected,1234 ERROR,2024-01-15T10:10:45Z,Database connection failed,5678 INFO,2024-01-15T10:15:00Z,Connection restored,
TOON — 213 символов
logs[4]{level,timestamp,message,user_id}: INFO,2024-01-15T10:00:00Z,Application started,~ WARN,2024-01-15T10:05:23Z,High memory usage detected,1234 ERROR,2024-01-15T10:10:45Z,Database connection failed,5678 INFO,2024-01-15T10:15:00Z,Connection restored,~
Сравнение
Формат |
Символы |
Эффективность относительно лучшего |
Экономия относительно JSON |
|---|---|---|---|
CSV |
193 |
100% |
50% |
TOON |
213 |
90.6% |
45% |
TRON |
307 |
62.9% |
20% |
YAML |
311 |
62.1% |
19% |
JSON |
384 |
50.3% |
— |
Победитель: CSV. TOON добавляет минимальные накладные расходы ради структуры
Общая сводка производительности
Полные результаты тестов
Тест |
Лучший формат |
JSON |
YAML |
CSV |
TOON |
TRON |
TRON относительно JSON |
|---|---|---|---|---|---|---|---|
1. Плоская структура |
CSV |
746 |
444 |
152 |
184 |
223 |
на 70% меньше |
2. Ответ API |
TOON/YAML |
461 |
341 |
- |
341 |
346 |
на 25% меньше |
3. Спецсимволы |
TRON |
270 |
240 |
- |
219 |
214 |
на 21% меньше |
4. Большие массивы |
TOON |
244 |
207 |
- |
181 |
201 |
на 18% меньше |
5. Временные ряды |
CSV |
358 |
311 |
193 |
202 |
234 |
на 35% меньше |
6. RAG-фрагменты |
TRON |
493 |
365 |
- |
351 |
307 |
на 38% меньше |
7. Схема функций |
TOON |
367 |
257 |
- |
248 |
280 |
на 24% меньше |
8. 2D-матрица |
CSV |
99 |
85 |
59 |
63 |
71 |
на 28% меньше |
9. Null-значения |
CSV |
225 |
186 |
87 |
107 |
131 |
на 42% меньше |
10. Few-shot |
TOON |
259 |
207 |
- |
178 |
209 |
на 19% меньше |
11. Конфиг |
TRON |
349 |
273 |
- |
273 |
246 |
на 30% меньше |
12. Логи |
CSV |
384 |
311 |
193 |
213 |
307 |
на 20% меньше |
Средняя экономия относительно JSON:
TOON: ~35% по всем применимым тестам
TRON: ~31% по всем применимым тестам
Матрица возможностей форматов
Возможность |
JSON |
YAML |
CSV |
TOON (табличный) |
TOON (объектный) |
TRON |
|---|---|---|---|---|---|---|
Вложенные объекты |
✅ |
✅ |
❌ |
⚠️ |
✅ |
✅ |
Массивы |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
Null-значения |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
Специальные символы |
✅ |
✅ |
⚠️ |
✅ |
✅ |
✅ |
Unicode/эмодзи |
✅ |
✅ |
✅ |
✅ |
✅ |
✅ |
Комментарии |
❌ |
✅ |
❌ |
❌ |
❌ |
❌ |
Токенная эффективность |
❌ |
⚠️ |
✅ |
✅ |
✅ |
✅ |
Человекочитаемость |
⚠️ |
✅ |
✅ |
✅ |
✅ |
⚠️ |
Машинный парсинг |
✅ |
✅ |
✅ |
⚠️ |
⚠️ |
✅ |
Совместимость с JSON |
✅ |
❌ |
❌ |
❌ |
❌ |
✅ |
Определения схем |
❌ |
❌ |
❌ |
⚠️ |
❌ |
✅ |
Легенда:
✅ Полная поддержка
⚠️ Ограниченная или условная поддержка
❌ Нет поддержки
Рекомендации по выбору формата
Когда использовать TOON
✅ Хорошо подходит для:
Передачи данных в LLM: это основной сценарий. TOON специально создан для минимизации расхода токенов и снижает стоимость API на 70-75%, сохраняя читаемость для модели.
Сценариев, где стоимость токенов заметна: каждый сэкономленный символ напрямую уменьшает счет за API, а на продакшен-нагрузках компактный синтаксис TOON может экономить тысячи долларов в месяц.
Данных с полноценной вложенностью: в отличие от CSV, TOON умеет описывать сложные вложенные структуры и все равно остается компактнее JSON или YAML.
Ситуаций, где важна читаемость: TOON сохраняет отступы и понятную структуру, поэтому промпты проще отлаживать и поддерживать, чем плотный JSON.
Ограниченного окна контекста: прирост плотности данных в 4 раза позволяет уместить больше примеров, документации или контекста в тот же лимит токенов.
RAG-приложений: фрагменты документов с метаданными сжимаются на 29% лучше JSON, поэтому в запрос помещается больше релевантного контекста.
Схем function calling: описания инструментов становятся на 32% компактнее, оставляя больше токенов для диалога и рассуждений.
Few-shot-примеров: обучающие примеры сжимаются на 31% лучше, что позволяет добавить больше примеров в тот же бюджет контекста.
Любых входных данных для LLM: модели читают TOON почти так же легко, как JSON, но платите вы за меньшее число токенов.
❌ Лучше избегать, если:
Вы строите публичные API: используйте JSON. TOON не является стандартным форматом, а внешние потребители ожидают JSON ради совместимости и поддержки инструментами.
Нужна зрелая экосистема инструментов: у JSON есть валидаторы, редакторы и библиотеки для каждого языка, а для TOON нужен отдельный парсер.
Вы работаете не с LLM-системами: традиционные базы данных, API и программы ожидают стандартные форматы; преимущества TOON проявляются именно в оптимизации токенов для LLM.
Требуется совместимость с JSON: в таком случае лучше использовать TRON.
Когда использовать TRON
✅ Хорошо подходит для:
JSON-совместимых процессов: TRON является надмножеством JSON, поэтому существующие парсеры могут напрямую читать секцию данных; менять всю цепочку инструментов не нужно.
Массивов однородных объектов: определения классов убирают повторяющиеся имена полей и экономят 20-40% на табличных данных.
Постепенной миграции с JSON: можно использовать JSON как есть и добавлять определения классов только там, где это выгодно.
Вложенных однородных структур: несколько определений классов могут сжимать сложные вложенные массивы. В тесте с RAG-фрагментами экономия составила 38%.
Ситуаций, где важна поддерживаемость: структура JSON остается видимой, поэтому отладка проще, чем в чистом TOON.
Неоднородных вложенных данных: компактный JSON-вывод TRON выигрывает у YAML/TOON на структурах вроде конфигов: экономия 30%.
❌ Лучше избегать, если:
Данные строго табличные: CSV или табличный TOON компактнее, потому что TRON все еще несет накладные расходы JSON-структуры.
Нужно максимальное сжатие: TOON дает экономию 70-75% относительно JSON, а TRON в среднем около 30%.
Основной сценарий — ручное редактирование: YAML или основанный на отступах синтаксис TOON читаются проще.
Когда использовать JSON
✅ Хорошо подходит для:
Публичных API: JSON — универсальный стандарт веб-API; каждый язык программирования имеет надежную поддержку JSON, поэтому интеграция проще.
Сценариев, где нужна универсальная совместимость: JSON работает в браузерах, на серверах, в базах данных, мобильных приложениях и IoT-устройствах без конвертации формата.
Ситуаций, где важна развитая экосистема инструментов: у JSON есть зрелые валидаторы, JSON Schema, форматтеры и средства отладки почти в любой IDE.
Контрактов, где критична валидация схем: JSON Schema дает формальную валидацию, версионирование и документацию, что важно для API-контрактов.
Случаев, где стоимость токенов не важна: если вы не платите за токены, например при локальных моделях или безлимитных планах, привычность JSON может быть важнее экономии TOON.
❌ Лучше избегать, если:
Данные отправляются в LLM: многословный синтаксис JSON — скобки, кавычки, запятые — тратит на 70-75% больше токенов, чем TOON для тех же данных.
Важна токенная эффективность: на масштабе накладные расходы JSON превращаются в заметные ежемесячные затраты и более медленные ответы.
Приложение чувствительно к стоимости: продакшен LLM-приложения с миллионами запросов резко почувствуют разницу между JSON и TOON.
Когда использовать YAML
✅ Хорошо подходит для:
Конфигурационных файлов: минимальный синтаксис YAML и поддержка комментариев делают конфиги самодокументируемыми и удобными в поддержке.
Частого ручного редактирования: структура на отступах естественнее для чтения и записи, чем фигурные и квадратные скобки JSON.
Сценариев, где нужны комментарии: YAML поддерживает комментарии нативно, а JSON — нет. Это важно для объяснения настроек и решений в конфигурации.
Ситуаций, где читаемость важнее всего: чистый синтаксис без лишних кавычек и скобок делает YAML удобным форматом для совместной работы.
Данных, которые не отправляются в LLM: преимущества читаемости YAML нужны людям; моделям они не нужны, а вы платите лишними токенами по сравнению с TOON.
❌ Лучше избегать, если:
Вы оптимизируете токены для LLM: YAML на 30-50% многословнее TOON, и на LLM-масштабе эти лишние токены стоят реальных денег.
Основной сценарий — машинный парсинг: гибкость YAML, где одни и те же данные можно выразить несколькими способами, усложняет стабильный парсинг по сравнению с JSON.
Размер важен: пробелы и явная структура YAML делают его крупнее TOON, что проблемно при жестких лимитах.
Когда использовать CSV
✅ Хорошо подходит для:
Строго табличных данных: CSV — самый компактный формат для строк и столбцов; фактически это только запятые и переводы строк, то есть минимум накладных расходов.
Сценариев без вложенности: CSV отлично работает с плоскими таблицами; если данные естественно ложатся в электронную таблицу, по эффективности его трудно обойти.
Максимального сжатия табличных данных: CSV обычно дает минимальное число символов — часто на 50% меньше TOON и на 80% меньше JSON.
Совместимости с таблицами: CSV напрямую открывается в Excel, Google Sheets и почти любом инструменте для работы с данными.
Простого импорта и экспорта: базы данных, аналитические инструменты и пайплайны данных обычно поддерживают CSV из коробки.
❌ Лучше избегать, если:
У данных есть вложенные структуры: CSV не умеет представлять иерархии и связи; придется заводить несколько файлов и соединения, теряя простоту CSV.
Нужны сложные типы данных: в CSV фактически есть только строки, включая числа как строки; нет нативных булевых значений, null или объектов.
Нужно описывать связи между сущностями: CSV не выражает связи «один ко многим» и «многие ко многим» без превращения данных в реляционную структуру.
TRON против TOON: прямое сравнение
Аспект |
TRON |
TOON |
|---|---|---|
Философия |
Расширить JSON классами |
Полностью заменить синтаксис JSON |
Совместимость |
Надмножество JSON, обратно совместим |
Новый формат, нужна конвертация |
Лучший случай |
~40% экономии относительно JSON |
~75% экономии относительно JSON |
Худший случай |
Откат к JSON: 0% экономии |
Все равно экономит за счет синтаксиса с отступами |
Читаемость |
Похож на JSON, компактный |
Похож на YAML, с отступами |
Инструменты |
Для данных можно использовать JSON-парсеры |
Нужен TOON-специфичный парсер |
Вложенные классы |
✅ Полная поддержка |
⚠️ Ограниченно |
Лучше всего подходит для |
Постепенной миграции, смешанных данных |
Максимального сжатия |
Когда TRON обходит TOON
Сценарий |
TRON |
TOON |
Победитель |
|---|---|---|---|
RAG-фрагменты: вложенные однородные структуры |
307 |
351 |
TRON |
Конфиги: неоднородные вложенные структуры |
246 |
273 |
TRON |
Специальные символы |
214 |
219 |
TRON |
Когда TOON обходит TRON
Сценарий |
TRON |
TOON |
Победитель |
|---|---|---|---|
Плоская структура |
223 |
184 |
TOON |
Большие массивы |
201 |
181 |
TOON |
Few-shot-примеры |
209 |
178 |
TOON |
Схемы функций |
280 |
248 |
TOON |
Логи |
307 |
213 |
TOON |
Заключение
Главное
TOON снижает стоимость токенов LLM на 70-75% относительно JSON
Это подтверждается 14 реалистичными тестовыми сценариями
Сохраняет функциональный паритет
Не ухудшает качество
TRON снижает стоимость токенов LLM на 20-40% относительно JSON
Сохраняет совместимость с JSON
Отлично работает с вложенными однородными структурами: 38% экономии на RAG
Хорош для постепенной миграции
Эффективность окна контекста заметно растет
TOON: в 4 раза больше данных в том же контексте
TRON: в 2,6 раза больше данных в том же контексте
Меньше необходимости дробить данные, выше связность
Выбирать нужно по ограничениям
Нужна максимальная экономия → TOON
Требуется совместимость с JSON → TRON
Данные плоские и табличные → CSV
Важнее всего ручное редактирование → YAML
Готово к продакшену и проверено на практике
14 подробных тестовых сценариев
Реальные примеры
Понятный путь миграции
Измеримые результаты
Коротко
JSON — для машин. YAML — для людей. TRON — для LLM, когда нужна JSON-совместимая компрессия. TOON — для LLM, когда нужна максимальная компрессия.
Для любого приложения, которое отправляет структурированные данные в большие языковые модели, TOON и TRON дают заметные преимущества относительно JSON. Выбирайте TOON, если можете принять новый формат и хотите максимальную экономию. Выбирайте TRON, если нужно сохранить совместимость с JSON и при этом снизить расходы.
Схема выбора
Данные идут в LLM? ├─ Да │ ├─ Данные плоские/табличные? │ │ └─ Используйте CSV или TOON в табличном стиле │ ├─ Это однородные массивы объектов? │ │ ├─ Нужна совместимость с JSON? → Используйте TRON │ │ └─ Нужна максимальная экономия? → Используйте TOON │ └─ Данные глубоко вложенные/неоднородные? │ ├─ Нужна совместимость с JSON? → Используйте TRON: компактный JSON │ └─ Нужна максимальная экономия? → Используйте TOON в объектном стиле └─ Нет ├─ Это API? │ └─ Используйте JSON ├─ Это конфигурационный файл? │ └─ Используйте YAML └─ Это табличные данные? └─ Используйте CSV
Комментарии (2)

avshkol
02.06.2026 18:46Ещё хорошо бы сделать тесты на разных llm, насколько успешно и безошибочно они прочитают каждый из форматов?
Предположу, что здесь победит json, за счёт некоторой информационной избыточности.
Void-Cowboy
такое себе
yml может в ссылки, из за чего компактность увеличивается при одинаковых данных. так же как плюс поддержка комментариев
а еше yml можно по разному записывать - вообщем не увидел преимуществ нового в сравнении. с существующим старым