Şemaya gelmeden önce kaybolan bilgi
Araç girdisinde qty alanını kontrol ediyorsunuz. Ayrıştırılmış nesnede değer 8; tür ve miktar sınırı uygun. Fakat ham gövde içinde aynı ad önce 3, sonra 8 olarak iki kez yazılmış olabilir. Ayrıştırıcı yalnız son değeri tuttuysa şema ilk değerin varlığını artık göremez. Bu durumda geçerli nesne, tek anlamlı bir ham istek alındığını kanıtlamaz.
Bu yazıdaki JSON gövdeleri sentetik eğitim verisidir; stok işlemi veya başka araç çağrısı yapılmaz. İncelenen kabul koşulu yalnızca aynı nesne kapsamındaki üye adlarının benzersizliğidir. Buradan geçen gövdenin iş şemasına, yetkiye veya miktar kuralına uygun olduğu henüz söylenmez. Denetim katmanlarını sırayla ve ayrı sonuçlarla tutacağız.
RFC 8259, aynı nesne içinde adların benzersiz olmasını önerir. Tekrarlı adların alıcı yazılımlarda farklı sonuçlara yol açabileceğini; son değerin korunması, hata verilmesi veya bütün çiftlerin raporlanması gibi davranışlar görülebildiğini açıklar. Bu nedenle “JSON açıldı” ifadesi tek başına taşınabilir bir anlam güvencesi değildir.Kaynak: RFC 8259 — JSON objects
| Kimlik | Gövde |
|---|---|
| J1 | {"qty":3,"qty":8} |
| J2 | {"qty":3,"qty":3} |
| J3 | {"qty":3,"\u0071ty":8} |
| J4 | {"qty":3,"detail":{"qty":8}} |
| J5 | {"note":"qty","qty":8} |
| J6 | [{"qty":3},{"qty":8}] |
Adı, değeri ve nesne sınırını ayırın
J1’de aynı nesnede iki qty üyesi vardır; değerlerinin farklı olması çelişkiyi görünür kılar. J2’de değerler aynı olsa da ad iki kez bulunur. Burada seçtiğimiz sözleşme tekrarları değer eşitliğine bakmadan reddeder. Aynı sonucu vermiş görünmek, bozuk aktarımın sonraki sürümde de aynı anlamı taşıyacağını garanti etmez.
J3 ikinci adı bir Unicode kaçışıyla yazar. Kaçış çözüldüğünde ad yine qty olur. Yalnızca ham metinde düz qty sözcüğünü arayan bir kontrol bu tekrarı kaçırabilir. Ad karşılaştırması JSON dizgesinin kaçışları çözüldükten sonra, aynı nesne kapsamı içinde yapılmalıdır. Kullanıcının serbest not metnindeki sözcükler üye adı sayılmaz.
| Kimlik | Bu kontrolde karar | Gerekçe |
|---|---|---|
| J1 | Reddet | Aynı nesnede qty iki kez; değerler farklı |
| J2 | Reddet | Aynı nesnede qty iki kez; değer eşitliği kurtarmaz |
| J3 | Reddet | Kaçış çözüldüğünde aynı qty adı |
| J4 | Geçer | Dış ve iç nesnede ayrı kapsam |
| J5 | Geçer | Not değeri içindeki qty bir üye adı değil |
| J6 | Geçer | Dizide iki ayrı nesne; her birinde tek qty |
J6’nın geçmesi, aracın dizi kabul ettiğini söylemez. Üst düzey nesne gerektiren bir iş şeması bu gövdeyi sonraki adımda reddedebilir. J4 için de detail alanı şemada bulunmayabilir. Burada “geçer” ifadesini yalnızca ad benzersizliği kapısına bağlamak, farklı kontrollerin sonuçlarını birbirine karıştırmayı önler.
Üye çiftlerini kaybetmeden inceleyin
J1–J6 ham gövdelerini aynı nesnede yinelenen üye adları açısından incele. Adlardaki JSON kaçışlarını çöz; nesne kapsamlarını ayrı tut. Metin değerinde geçen qty sözcüğünü alan adı sayma. Aynı değerle tekrar edilen adı da reddet. İlk veya son değeri seçerek gövdeyi sessizce düzeltme. Çıktı: kimlik, bu kapıda karar, kapsam ve gerekçe. Şema geçerliliği veya gerçek işlem başarısı iddia etme.
Reddet: J1, J2, J3. Ad benzersizliği kapısından geçer: J4, J5, J6. Toplam 3 + 3 = 6 gövde. J1 için qty=8 sonucunu almak, ham gövdedeki qty=3 üyesinin bulunmadığını göstermez. Geçen gövdeler sonraki şema ve iş kontrollerine gider.
Python json modülü varsayılan davranışında yinelenen adlarda yalnız son değeri korur. Belge, object_pairs_hook ile bu davranışın değiştirilebileceğini açıklar. Bu özellik, nesnenin üye çiftlerini sırayla alıp bir sözlüğe dönüştürmeden önce tekrarları denetlemeye olanak verir. Burada belirli bir ajan ürününün bu denetimi hazır sunduğunu varsaymıyoruz.Kaynak: Python — Repeated names within a JSON object
Uygulama tasarımında her nesne açıldığında ayrı bir görülmüş ad kümesi tutulabilir. Çözülmüş ad o kümede zaten varsa aktarım reddedilir; iç nesne yeni bir kapsam açar. Denetimin çıktısı açık bir hata olmalıdır. Ham gövdeyi önce sıradan sözlüğe dönüştürüp sonra anahtarları saymak, kaybolan ilk üye çiftini geri getiremez.
Metin araması yerine yapıyı izleyin
- Önce JSON sözdizimi ayrıştırılabilir olmalı.
- Her nesnede çözülmüş adlar ayrı bir kapsamda sayılmalı.
- Reddedilen gövde otomatik ilk/son değer seçimiyle onarılmamalı.
- Bu kapıdan geçen sonuç daha sonra şema ve iş kurallarına gitmeli.
Basit bir sözcük sayacı, not metinlerini ve iç içe nesneleri yanlışlıkla tekrar sayar. Düzenli ifadeyle yalnızca tırnakları aramak da kaçışlı tırnak, dizge içindeki süslü ayraç ve iç içe yapılar karşısında yeterli bir genel JSON ayrıştırıcısı değildir. Gerçek entegrasyonda ham üye çiftlerini koruyabilen bir ayrıştırma yolu seçilmeli ve sınırları belgelenmelidir.
Günlükte hata yerini ve kapsamını göstermek incelemeyi kolaylaştırır. Ancak gerçek istek gövdeleri kişisel veya kurumsal bilgi içerebilir; bütün gövdeyi her olay kaydına kopyalamak bu eğitim örneğinin gereği değildir. Hata kodu, izinli teknik konum ve deneme kimliğiyle de iz sürülebilir. Hangi alanların tutulacağı mevcut kayıt politikasına göre belirlenir.
Kaynak sistemin tekrarları neden ürettiği de çözülmelidir. İki ayrı oluşturucunun aynı alana yazması veya metin birleştirmeyle JSON üretmek gibi nedenler olabilir, fakat yalnız bu altı gövdeden gerçek neden çıkarılamaz. Denetim kaydı olası neden tahmini ile gözlenen üye tekrarını ayrı tutmalıdır.
Tekrarı iç nesneye taşıyın
J4 gövdesindeki detail nesnesi bu kez iki qty üyesi taşısın: 8 ve 9. Dış qty değeri 3 olarak kalsın. Hangi kapsamın reddedileceğini yazın. Sonra qty ile Qty adlarının aynı kapsamda bulunduğunu düşünün; bu yazının tam ad eşitliği kuralı altında sonucun nasıl değişeceğini açıklayın.
detail içindeki qty tekrarı gövdeyi reddettirir; dış qty ayrı kapsamdadır. qty ve Qty tam ad eşitliğinde farklı adlardır. İş sözleşmesi harf büyüklüğüne duyarsız adlar istiyorsa bu ayrıca tanımlanır; bu kontrol kendiliğinden küçük harfe dönüştürmez.
Kendi aracınızın sözleşmesinde ham giriş ile ayrıştırılmış nesne arasında hangi bilginin kaybolabildiğini kaydedin. Böylece bir şemanın onayladığı son nesneyi, hiç incelenmemiş bir aktarım geçmişiyle eşitlememiş olursunuz.
Kaynaklar ve doğrulama
- RFC 8259 — JSON objects
Aynı nesnede adların benzersiz olması önerisi ve yinelenen adlarda alıcı davranışlarının farklılaşması.
Erişim ve kontrol: - Python — Repeated names within a JSON object
Varsayılan son değeri koruma davranışı; object_pairs_hook ile nesne üye çiftlerini denetleme.
Erişim ve kontrol:
AI Ajanları ve İş Akışı Otomasyonu
AI Ajanları ve İş Akışı Otomasyonu eğitiminde araç sözleşmenize ham giriş denetimini ekleyebilirsiniz. İncelemeye hem gelen gövdeyi hem ayrıştırılmış sonucu getirmek iki kontrol katmanını ayırmayı sağlar.
- Kuruma özel planlanır