JSON
JSON; API'ler, açıklamalar ve model çıktıları için kullanılan nesneler, diziler ve değerlerden oluşan bir metin biçimidir. Sözdizimi kuralları, ML kullanımları, JSON Lines ve kod.
JSON, JavaScript Nesne Gösterimi ifadesinin kısaltmasıdır ve yapılandırılmış verileri depolamak ve aktarmak için kullanılan hafif, metin tabanlı bir biçimdir. Douglas Crockford, 2000'lerin başında bu biçimi JavaScript'in nesne değişmezi söz dizimini temel alarak tanımladı; biçim artık IETF RFC 8259 ve ECMA-404 ile standartlaştırılmıştır. JSON dilden bağımsızdır, insanlar tarafından okunabilir ve neredeyse her programlama dilinin standart kitaplığı tarafından ayrıştırılır; bu da onu web API'leri için varsayılan biçim hâline getirir. Makine öğreniminde (ML) tahminleri çıkarım motorlarından dışarı aktarır, veri kümesi açıklamalarını depolar, deney meta verilerini günlüğe kaydeder ve büyük dil modellerinin (LLM'ler) yapılandırılmış çıktılarını tanımlar.
JSON Söz Dizimi#
Bir JSON belgesi iki kapsayıcı ve dört değer türünden oluşur:
- Nesneler: Süslü ayraçlar içindeki sırasız anahtar-değer çiftleri kümeleridir; örneğin
{"name": "bus", "confidence": 0.94}. Anahtarlar çift tırnak içinde dizeler olmalıdır. - Diziler: Köşeli ayraçlar içindeki sıralı listelerdir; örneğin
[48.5, 398.0, 245.3, 902.1]. - Değerler: Dizeler, sayılar,
true,falsevenullsabitleri ya da iç içe nesneler ve diziler.
Biçim katı kurallara tabidir. Yorumlara, sondaki virgüllere, tek tırnaklı dizelere ve NaN ile Infinity değerlerine izin verilmez; ancak Python'ın json modülü, allow_nan=False ayarlanmadığı sürece varsayılan olarak NaN yazar ve katı ayrıştırıcıların reddettiği dosyalar üretir. RFC 8259 ayrıca sayıların yalnızca IEEE 754 çift duyarlılık sınırları içinde güvenilir biçimde aktarılabildiği konusunda uyarır; bu nedenle bazı veritabanı kimlikleri gibi 2⁵³ − 1'den büyük tam sayılar genellikle dizge olarak gönderilir.
Makine Öğrenimi İş Akışlarında JSON#
Bir güvenlik sistemindeki kamera bir kareyi nesne algılama hizmetine gönderdiğinde, model sunumu katmanı genellikle JSON ile yanıt verir: algılanan her nesne için sınıfını, güven puanını ve sınırlayıcı kutu koordinatlarını içeren bir kayıt; bu kayıtlar panolarda, mobil uygulamalarda ve MongoDB gibi belge veritabanlarında kullanıma hazırdır.
Etiket biçimleri de JSON'a dayanır. COCO veri kümesi, bir bölüme ait tüm etiketleri üç ana liste içeren tek bir JSON dosyasında saklar: dosya adları ve boyutları için images, sınıf kimlikleri ve adları için categories ve her girdisinin görüntüye ve kategoriye kimlikleriyle işaret ettiği, ayrıca kutuyu sol üst köşeden piksel cinsinden [x, y, width, height] olarak sakladığı annotations. YOLO biçimi ise her görüntü için normalize edilmiş merkez koordinatlarını içeren bir metin dosyası kullanır. İki biçim arasında dönüştürme, veri etiketleme hatlarında sık uygulanan bir adımdır; özel bir veri kümesi sınıfı, YOLO'yu doğrudan COCO JSON üzerinde de eğitebilir.
JSON Lines, NDJSON olarak da bilinir ve her satıra eksiksiz bir JSON nesnesi yazar. Böylece dosyalara ekleme yapılabilir, dosyalar akış hâlinde işlenebilir ve tüm belgeyi ayrıştırmadan parçalara bölünebilir; bu özellikler eğitim günlükleri, tahmin akışları ve LLM'leri ince ayarlamak için kullanılan talimat veri kümeleri açısından elverişlidir. LLM'ler için JSON Schema, uygulamanın beklediği alanları tam olarak tanımlar; yapılandırılmış çıktılar ve işlev çağırma da modelin bu şemaya uyan JSON üretmesini sağlar. RFC 7946 ile standartlaştırılan GeoJSON, biçimi coğrafi ögelere uygular ve uydu görüntüsü analizinin algılamaları haritaya yerleştirmesini sağlar.
Tahminleri JSON'a Dönüştürme#
Ultralytics YOLO Results nesneleri, tahminlerini to_json() ile serileştirir; her algılama için sınıf adını, sınıf kimliğini, güven değerini ve x1, y1, x2, y2 kutu köşelerini, ayrıca örnek bölümleme ve poz kestirimi modelleri için maske veya anahtar nokta koordinatlarını içeren bir kayıt yazar. Aşağıdaki örnek, bir örnek görüntü üzerinde YOLO26 çalıştırır ve JSON'ı Python'ın standart kitaplığıyla yeniden ayrıştırır:
import json
from ultralytics import YOLO
# Önceden eğitilmiş bir YOLO26 algılama modelini yükle ve çıkarım çalıştır
model = YOLO("yolo26n.pt")
results = model("https://ultralytics.com/images/bus.jpg")
result = results[0]
# Her algılamayı JSON dizesine serileştir (normalize=True kutuları 0-1 aralığına ölçekler)
json_string = result.to_json()
# Herhangi bir JSON ayrıştırıcı bunu yeniden okuyabilir; burada Python sözlüklerinden oluşan bir listeye okunuyor
detections = json.loads(json_string)
print(json.dumps(detections[0], indent=2))Yazdırılan kayıt; name, class ve confidence anahtarlarını, ayrıca piksel cinsinden köşe koordinatlarını içeren iç içe bir box nesnesini barındıran bir JSON nesnesidir.
JSON ve İlgili Biçimlerin Karşılaştırması#
- YAML: Yorumlara ve girintiye dayalı iç içe yapıya izin veren, eğitim yapılandırmalarında ve veri kümesi tanımlarında yaygın olarak kullanılan, daha okunabilir bir biçimdir. YAML 1.2, JSON'ın üst kümesi olacak şekilde tasarlanmıştır; bu nedenle çoğu JSON belgesi geçerli YAML'dır.
- XML: Pascal VOC açıklamalarında kullanılan, JSON'dan daha ayrıntılı, etiket tabanlı bir biçimdir; öznitelikleri, ad alanlarını ve şemaları destekler.
- CSV: Tablo verileri için kompakt olan düz bir tablo biçimidir; ancak nesneleri veya listeleri iç içe yerleştiremez.
- İkili biçimler: Protocol Buffers ve MessagePack, JSON'dan daha küçük ve daha hızlı ayrıştırılır; ancak insanlar tarafından okunamaz. ONNX model dosyaları Protocol Buffers mesajları olarak depolanır.










