Hem JSON hem de TOON yapılandırılmış verileri temsil eder. Her ikisi de metin tabanlıdır. Her ikisi de nesneleri, dizileri ve iç içe geçmiş hiyerarşileri tanımlayabilir. Yani TOON'a rastlayıp bunun var olmayan bir sorunu çözmeye çalışan başka bir JSON alternatifi olup olmadığını merak ettiyseniz — bu haklı bir soru. Cevap şu: tamamen farklı işler için optimize edilmişler ve bir kez görünce seçim kendiliğinden ortaya çıkıyor.

JSON, veri değişiminin evrensel dilidir. On yılı aşkın süredir REST API'lerinin omurgası olmuş, her modern programlama dilinde yerel olarak destekleniyor ve varsayılan olarak başvurduğunuz şey bu. TOON daha dar bir misyonla daha yeni bir format: büyük dil modellerine yapılandırılmış veri gönderip alırken token kullanımını en aza indirmek. Aynı temel veri, radikal şekilde farklı bir ayak izi.

JSON'u Harika Yapan Nedir

JSON'un süper gücü her yerde bulunmasıdır. RFC 8259 spesifikasyonu birkaç sayfaya sığacak kadar basittir; bu nedenle Python'dan Go'ya, Rust'a kadar her dil, standart kütüphanesinde veya ekosisteminde birinci sınıf bir JSON ayrıştırıcısına sahiptir. Hiçbir şey yüklemenize gerek yok. Formatı meslektaşlarınıza açıklamanıza gerek yok. Ve araçlar — biçimleyiciler, doğrulayıcılar, şema doğrulayıcıları — evrensel olarak mevcuttur.

  • Evrensel destek. Her dil, her çalışma zamanı, her bulut servisi JSON'u yerel olarak konuşur.
  • İnsan tarafından okunabilir. Anahtarlar tırnaklı dizelerdir, yapı süslü parantezler ve köşeli parantezlerle açıktır.
  • Yazımlı primitifler. Sayılar, booleanlar, null'lar, dizeler, diziler ve nesneler — hepsi açıkça temsil edilir.
  • Zengin araç ekosistemi. Linter'lar, biçimleyiciler, JSON Schema doğrulayıcılar, JSONPath sorgu motorları — ekosistem çok büyük.
  • REST API standardı. Content-Type: application/json neredeyse her HTTP API'de varsayılan beklentidir.

TOON'u Farklı Yapan Nedir

TOON belirli bir kısıtlama göz önünde bulundurularak oluşturuldu: LLM bağlam pencereleri ve token maliyetleri. OpenAI API'sini veya başka bir LLM sağlayıcısını çağırdığınızda token başına ödeme yaparsınız. Tokenlar karakter değil — kabaca kelime parçacıklarıdır ve JSON'un yapısal noktalama işaretleri (tırnak işaretleri, iki nokta üst üste, virgüller, süslü parantezler) şaşırtıcı sayıda token tüketir. Özellikle tablo verileri için JSON israftır: her satır her anahtar adını tekrarlar.

TOON bunu kompakt bir notasyonla çözer. Tablo verileri için anahtarlar bir başlıkta bir kez tanımlanır ve satırlar düz virgülle ayrılmış değerlerdir. Tek nesneler ve diziler için yalın bir satır içi sözdizimi kullanır. OpenAI tokenizer pratikte farkı görmek için kullanışlı bir araçtır — aynı verileri her iki formatta yapıştırın ve token sayısını doğrudan karşılaştırın.

Yan Yana: 10 Satırlık Veri Kümesi

JSON'da 10 satırlık bir ürün tablosu — bir LLM'ye fiyatları analiz etmesi veya öğeleri kategorize etmesi için geçirebileceğiniz türden bir şey:

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}
]

Şimdi TOON'da aynı veriler. Anahtarlar başlıkta bir kez tanımlanır — satırlar yalnızca değerleri içerir:

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
Pratikte token tasarrufu: Yukarıdaki JSON versiyonu OpenAI tokenizer'da yaklaşık 420 token sayar. TOON versiyonu yaklaşık 195 token — yarısından az. Ölçekte (günde binlerce API çağrısı veya yüzlerce satırlık veri kümeleri), bu fark gerçek paraya dönüşür.

JavaScript / TypeScript'te TOON Kullanımı

@toon-format/toon npm paketi kodlama ve çözme işlemlerini yönetir. Bir kez yükleyin ve API basittir:

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"

Ayrıca tek bir nesneyi satır içi olarak kodlayabilirsiniz. TOON'un nesne gösterimi anahtarları tırnaksız süslü parantezler kullanır ve dizi gösterimi ise köşeli parantezler içinde virgülle ayrılmış değerlerdir:

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

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

TOON Ne Zaman Kullanılmalı

  • Yapılandırılmış verilerle LLM istemleri. Bir tablo, kayıt listesi veya ürün kataloğunu GPT-4 / Claude / Gemini çağrısına besleme. Token tasarrufu doğrudan API faturanızı azaltır.
  • LLM çıktı ayrıştırma. Bir LLM'ye TOON'da yanıtlaması talimatı verirseniz, yanıtlar hem giriş hem de çıkış tokenlarında daha kısa ve ucuz olur.
  • Özellikle tablo verileri. TOON'un başlık-bir-kez-sonra-satırlar yapısı tablo şeklindeki her şey için JSON'dan dramatik şekilde daha kompakttır.
  • Toplu işlem hatları. Her gün binlerce kaydı bir LLM üzerinden mi çalıştırıyorsunuz? Token kullanımında %40'lık bir azalma bile hızla toplanır.
  • Bağlam penceresi baskısı. Bir modelin bağlam sınırına yaklaşırken, TOON aynı pencereye daha fazla veri sığdırmanızı sağlar.

JSON ile Devam Etmek Ne Zaman Daha İyi

  • REST API'leri. Her HTTP istemcisi, her sunucu çerçevesi, her API ağ geçidi JSON konuşur. Geleneği bozmayın.
  • Yapılandırma dosyaları. package.json, tsconfig.json, settings.json — JSON çoğu ekosistemdeki yapılandırmanın standardıdır.
  • Veritabanı depolama. PostgreSQL'in jsonb'si, MongoDB belgeleri, DynamoDB — bunlar JSON yerlisidir. TOON burada yer almaz.
  • Servisler arası iletişim. İki servis birbiriyle konuştuğunda JSON kullanın. Günlükleme, izleme ve izleme araçlarınızın anladığı şey budur.
  • Genel API'ler. Harici geliştiriciler API'nizi tüketiyorsa, JSON beklenen sözleşmedir. TOON dahili bir optimizasyon olup genel bir arayüz formatı değildir.
  • Tarayıcı yerel ayrıştırma. JSON.parse() her tarayıcıda yerleşik olarak bulunur. TOON bir kütüphane gerektirir.

Karar Kılavuzu

Soruyu çözmek için hızlı bir kontrol listesi:

  • Veri bir LLM istemine mi gidiyor? TOON kullanın.
  • LLM'nin yapılandırılmış veri döndürmesi bekleniyor mu? TOON kullanın.
  • Veri tablo şeklinde mi (birçok satırda aynı anahtarlar)? TOON'u güçlü bir şekilde düşünün.
  • Bu bir REST API isteği veya yanıtı mı? JSON kullanın.
  • Bu bir yapılandırma dosyası mı? JSON (veya YAML) kullanın.
  • Bu bir veritabanında mı depolanıyor? JSON kullanın.
  • Bu veriyi LLM olmayan araçlar tüketecek mi? JSON kullanın.
  • Kullanım senaryonuz için token maliyetlerinin önemli olup olmadığından emin değil misiniz? JSON ile başlayın, sonra optimize edin.

Kullanışlı Araçlar

Her iki formatla da çalışıyorsanız, bu araçlar size zaman kazandıracak. JSON'dan TOON'a dönüştürücüyü kullanarak mevcut JSON verilerini alın ve LLM girişi için hazır kompakt bir TOON temsili oluşturun. TOON'dan JSON'a dönüştürücü diğer yöne gider — bir LLM TOON döndürdüğünde ve sonucu JSON yerel bir aşağı akış sistemine beslemeniz gerektiğinde kullanışlıdır. TOON Biçimleyici TOON dizelerini temizleyip doğrular ve JSON Biçimleyici ham JSON bloblarını güzelleştirmek için başvurulacak araç olmaya devam eder.

Özet

JSON ve TOON geleneksel anlamda rakip değiller — yığınınızın farklı bölümlerini hedefliyorlar. JSON API katmanına, yapılandırma dosyalarına ve veri depolamasına sahip. TOON, token sayısının para olduğu ve bağlam penceresi alanının değerli olduğu LLM katmanına sahip. İyi haber şu ki her ikisini de aynı projede sürtüşme olmadan kullanabilirsiniz: verileri JSON olarak depolayın ve aktarın, herhangi bir LLM çağrısından hemen önce TOON'a kodlayın ve çıkışta JSON'a veya yerel bir nesneye geri çözün. Bu modeli bir kez kurduğunuzda, token tasarrufu otomatik hale gelir.