>_toolkitbox

~/tools / LLM JSON Repair

LLM JSON Repair — Yapay zekânın döndürdüğü bozuk JSON'u düzeltin

Yapay zekâ modellerinin döndürdüğü JSON'a benzeyen ama JSON olmayan metni düzeltir: kod bloğunu ve araya giren sözleri atar, sondaki virgülleri ve yorumları siler, tırnakları, anahtarları ve Python değerlerini düzeltir; neyi değiştirdiğini tek tek listeler. Hiçbir şey tarayıcınızdan çıkmaz.

Girinti

Yalnızca tek bir açık yanıtı olan düzeltmeler uygulanır. Geri kalan her şey tahmin edilmek yerine konumuyla birlikte bildirilir.

Her şey tarayıcınızda çalışır. Yapıştırdığınız metin yüklenmez.

Dil modelleri JSON'u çoğu zaman bir kod bloğunun ve bir cümlenin içine koyar, sonra söz dizimini bozar: sondaki virgül, tek tırnak, yorum satırı, true yerine True. JSON.parse bunların hepsini reddeder. Bu araç metnin içindeki JSON'u bulur ve yalnızca tek bir açık çözümü olan sorunları onarır; ardından yaptığı her değişikliği listeler, böylece sonucu siz değerlendirebilirsiniz. Çıktı yarıda kesilmişse açık kalanları kapatır ve veri eksik olabileceği konusunda sizi uyarır. Tahmin yürütmez: onaramadığı girdiyi sessizce değiştirmek yerine konumuyla birlikte bildirir.

Kullanım örnekleri

  • Bir modelin yanıtını JSON.parse'a ya da bir yapılandırma dosyasına vermeden önce düzeltmek
  • JSON'un çevresinde kod bloğu ve açıklama bulunan bir yanıtı temizlemek
  • Onarılmış bir değerin fark edilmeden üretime sızmaması için nelerin değiştiğini kontrol etmek

Nasıl kullanılır

  1. Modelin yanıtını yapıştırın ya da örneği yükleyin.
  2. Onarılmış JSON'u ve altındaki değişiklik listesini okuyun.
  3. Sonucu kopyalayın. Kehribar renginde işaretli değişiklikler bilgi kaybettirebilir, bunları kontrol edin.

Geçerli JSON nedir

  • Dizeler ve üye adları yalnızca çift tırnak kullanır. Tek tırnak dil bilgisinin parçası değildir.
  • Yorum yoktur. İzin verilen tek dolgu boşluktur.
  • Virgül yalnızca üyelerin ya da öğelerin arasına konur; bu yüzden sondaki virgül geçerli değildir.
  • Bir değer; nesne, dizi, sayı ya da dizedir, ya da false, null ve true değerlerinden biridir. Infinity, NaN ve undefined JSON değeri değildir.
  • Sayılarda baştaki sıfır ya da baştaki + olamaz ve ondalık noktanın iki yanında da rakam bulunmalıdır; bu yüzden 012, +5, .5 ve 5. hep geçersizdir.
  • Bir dizenin içindeki U+0000 ile U+001F arasındaki denetim karakterleri kaçışlanmalıdır; bu yüzden dizede ham bir satır sonu geçersizdir.
  • En üst düzey yalnızca nesne ya da dizi değil, herhangi bir değer olabilir.

Model çıktısı genellikle nasıl bozulur

SorunÖrnekBu araç ne yapar
Kod bloğu ve araya giren sözlerSure! ```json { … } ``` Hope this helpsYalnızca JSON'u alır
Sondaki virgül[1, 2,]Virgülü kaldırır
Yorum{"a": 1 // note}Yorumu kaldırır
Tek tırnak{'a': 'b'}Çift tırnak kullanır
Çıplak anahtar{a: 1}Anahtarı tırnak içine alır
Python değerleri{"ok": True, "x": None}true ve null yazar
Dizede ham satır sonu"line one⏎line two"Bunu \n olarak kaçışlar
NaN veya undefined{"x": NaN}null yazar ve değerin kaybolduğu konusunda uyarır
Yarıda kesilmiş yanıt{"items": [{"id": 1}, {"id":Açık kalanları kapatır ve verinin eksik olabileceği konusunda uyarır

Neyi onarmak güvenlidir, neyi değil

Bozuk metnin yalnızca tek bir makul okunuşu varsa onarım güvenlidir. Sondaki virgül, yorum ya da kod bloğu, verinin söylediğini değiştirmeden kaldırılabilir. Diğer değişiklikler anlamı değiştirir; bu yüzden işaretlenirler ve kontrol etmelisiniz: kesilmiş bir yanıtı kapatmak geçerli ama eksik veri içeren bir JSON verir, NaN'ı null yapmak ise özgün değeri çöpe atar.

İki sınır JSON'un kendisinden gelir. RFC 8259, bir nesne içindeki adların benzersiz olması gerektiğini ve olmadıklarında yazılımın davranışının öngörülemez olduğunu söyler; bu araç, JSON.parse gibi sonuncusunu tutar. RFC ayrıca, yazılımların bir IEEE 754 double'ından fazla aralık ya da hassasiyet beklemediğinde iyi birlikte çalıştığını söyler. Bu araç sayıları yazdığınız gibi korur, ama çok uzun bir tam sayıyı double'a ayrıştıran bir program onu yuvarlar. -(2^53)+1 ile (2^53)-1 arasındaki tam sayılar kesindir.

Daha iyisi: API'den yapılandırılmış çıktı isteyin

Onarım bir yedek çözümdür. Model API'leri çıktıyı bir şemayla sınırlayabilir ve üç satıcı bunu farklı belgeler.

  • OpenAI: Structured Outputs, modelin JSON Schema'nıza uyan yanıtlar üretmesini sağlar; JSON mode ise yalnızca geçerli JSON'u garanti eder. Bir ret (refusal) şemaya uymayabilir ve azami token sınırına ulaşan bir yanıt eksiktir (durum incomplete, neden max_output_tokens).
  • Anthropic: yapılandırılmış çıktılar, yanıtın şemanıza uyması için kısıtlı kod çözme kullanır; belgeler bunun çoğu durumda geçerli olduğunu söyler. Bir ret (stop_reason refusal) ya da max_tokens ile kesilmiş bir yanıt şemaya uymayabilir; bu yüzden ayrıştırmadan önce stop_reason değerine bakın.
  • Google Gemini: model, verdiğiniz şemaya uyan JSON üretecek şekilde yapılandırılır. Anlamsal doğruluk garanti edilmez, bu yüzden değerleri doğrulayın; minLength ve maxLength gibi bazı kısıtlar da uygulanmaz.

Üç belgenin hiçbiri, çıktı kesildiğinde geçerli JSON vaat etmez. Ayrıştırılmış bir sonuca güvenmeden önce modelin neden durduğuna bakın.

Kaynaklar (2026-10-23 tarihinde kontrol edildi): RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format / OpenAI: Structured Outputs / Anthropic: Structured outputs / Google AI for Developers: Structured output

SSS

Neleri düzeltir?

Kod bloğunu ve JSON'un çevresindeki metni kaldırır; sondaki virgülleri ve // ya da /* */ yorumlarını siler; tek tırnakları ve kıvrık tırnakları çift tırnağa çevirir; tırnaksız anahtarları tırnak içine alır; True, False ve None değerlerini true, false ve null yapar; satırlar arasındaki eksik virgülleri ekler; dizelerin içindeki ham satır sonlarını kaçışlar; +5, .5 ve 0x1F gibi sayıları geçerli JSON sayılarına çevirir.

Neyi asla değiştirmez?

Değerleri. Dizeler karakter karakter korunur, sayılar da rakamlarını korur; bu yüzden 12345678901234567890 gibi uzun bir kimlik yuvarlanmaz. Yinelenen anahtarlarda JSON.parse gibi davranılır: sonuncusu geçerlidir.

Yanıt yarıda kesilmişse ne olur?

Açık kalan dizeleri, dizileri ve nesneleri kapatır; henüz değeri olmayan bir anahtarı atar. Bu, metni geçerli yapar ama tamamlamaz; bu yüzden sonuç eksik veri olabilir diye işaretlenir. Kesilmiş bir sonuca güvenmek yerine modelden devam etmesini isteyin ya da çıktı sınırını yükseltin.

NaN veya undefined neden null oldu?

JSON'da NaN, Infinity ya da undefined yoktur. Araç bunların yerine null yazar ve işaretler, çünkü özgün değer kaybolur.

Bazı girdileri neden reddediyor?

Tek bir açık çözüm olmadığında, örneğin atlanan öğelerin yerine üç nokta (...) konmuşsa ya da bir değerin olması gereken yerde çıplak bir sözcük varsa, tahmin yürütmek yerine durur ve nerede olduğunu gösterir.

Metin bir sunucuya gönderiliyor mu?

Hayır. Onarım tarayıcınızda çalışır.

İlgili