JSONPath Sorgu Test Aracı
JSONPath ifadesini yapıştırdığınız JSON üzerinde deneyin; eşleşen değerleri, yolları ve eşleşme sayısını görün
Verileriniz sizde kalır. Dönüşüm tarayıcının içinde yapılır, hiçbir şey sunucuya gitmez.
Bu araç işinizi gördü mü?
Teşekkürler, geri bildiriminiz alındı.
Nasıl çalışır?
JSONPath, büyük bir JSON içinden istediğiniz parçayı tek satırlık bir ifadeyle seçmenizi sağlar; Postman testleri, API ağ geçitleri ve Kubernetes kubectl -o jsonpath komutu bu dili kullanır. JSON'u sol panele yapıştırın ve ifadeyi yazın; sonuç yazdıkça sağ panelde güncellenir. Her ifade $ ile başlar ve belgenin kökünü gösterir: $.magaza.kitap[0].baslik ilk kitabın başlığını, $..yazar belgenin her yerindeki yazar alanlarını verir. Köşeli parantez içindeki süzgeç [?(@.fiyat<100)] koşula uyan öğeleri seçer; @ o anda bakılan öğedir. Örnek JSON'da $.magaza.kitap[?(@.fiyat<100)].baslik iki kitap döndürür: Kürk Mantolu Madonna ve Semaver. Başına $ yazmayı unutursanız araç ekler ve bunu altta söyler. Eşleşme çıkmazsa sonuç boş dizi olur; adların büyük/küçük harfine bakın. Yol çıktısı, bir değerin JSON'daki tam adresini gösterdiği için kodunuzda hangi anahtar zincirini kullanacağınızı da söyler.
Bu araç jsonpath sorgu, jsonpath tester, jsonpath online, jsonpath evaluator aramalarıyla da biliniyor.
JSONPath nedir?
JSONPath, JSON belgesinin içinden değer seçmek için yazılan kısa bir sorgu dilidir; XML için XPath neyse JSON için odur. $ kökü, nokta alt alanı, [0] dizi öğesini, [*] bütün öğeleri, .. her derinliği, [?(...)] koşullu süzgeci gösterir. 2024'ten beri RFC 9535 olarak standarttır; Postman, Kubernetes ve pek çok API aracı kullanır.
Süzgeç ifadesi nedir?
Süzgeç, bir dizinin öğelerinden yalnız koşula uyanları seçer: [?(@.fiyat<100)] fiyatı 100'den küçük öğeleri bırakır. @ o anda sınanan öğeyi gösterir; ==, !=, <, >, && ve || kullanılabilir. [?(@.ciltli)] gibi koşulsuz yazım, alanın var ve boş olmadığı öğeleri seçer.
JSONPath ile JSON Pointer arasındaki fark nedir?
JSON Pointer (RFC 6901) tek bir değerin tam adresidir: /magaza/kitap/0/yazar her zaman en çok bir sonuç verir, joker ya da süzgeç bilmez; JSON Patch ve JSON Schema $ref içinde kullanılır. JSONPath ise bir sorgu dilidir: $..yazar gibi tek ifade birçok değer döndürebilir ve koşullu süzgeç yazılabilir. Bir değeri değiştirmek ya da ona başvurmak istiyorsanız JSON Pointer, veriyi arayıp süzmek istiyorsanız JSONPath kullanın.
En çok kullanılan JSONPath ifadeleri (örnek JSON ile)
Aşağıdaki ifadeleri sayfadaki örnek JSON üzerinde doğrudan deneyebilirsiniz. İfadeler Stefan Goessner'in 2007'de tanımladığı sözdizimini izler; bugün kullanılan araçların çoğu bu biçimi tanır.
- $..yazar → dört yazarın adı (.. her derinlikte arar)
- $.magaza.kitap[?(@.fiyat<100)].baslik → fiyatı 100'den küçük iki kitabın başlığı
- $.magaza.kitap[?(@.ciltli)] → ciltli alanı olan kitaplar
- $..kitap[-1:] → son kitap; $..kitap[0,1] → ilk iki kitap
- $..kitap.length → kitap sayısı (4)
- $.magaza.* → magaza altındaki her şey (kitap dizisi ve kalem)
Dürüst sınırlar: RFC 9535 ile farklar ve güvenlik
JSONPath 2024'te RFC 9535 ile standartlaştı. Bu araç yaygın jsonpath-plus kütüphanesini kullanır ve eski Goessner sözdizimini izler: süzgeçler parantezli yazılır ([?(@.fiyat<100)]; RFC'de parantez isteğe bağlıdır), .length gibi JavaScript özellikleri çalışır, RFC'deki match() ve search() işlevleri yoktur. Aynı ifade başka bir kütüphanede küçük farklarla sonuç verebilir; özellikle süzgeç içinde metin karşılaştırırken bunu göz önünde tutun.
Süzgeç ifadeleri tarayıcının eval'i ile değil, kütüphanenin kendi güvenli yorumlayıcısıyla çalışır; ifadeye kod yazılıp çalıştırılamaz. Süzgeçte olmayan bir alana bakmak (@.yayinevi.ad, yayinevi yoksa) hata değil eşleşmeme sayılır.
Sık sorulanlar
JSONPath ifadesi nasıl test edilir?
JSON'u bu sayfanın sol paneline yapıştırın ve ifadeyi JSONPath kutusuna yazın. Eşleşen değerler sağda anında görünür, altta kaç eşleşme olduğu yazar. Sonuç seçeneğini Eşleşen yollar yaparsanız her değerin JSON içindeki tam adresini görürsünüz.
$. ile $.. arasındaki fark nedir?
Tek nokta bir alt seviyeye iner: $.magaza.kalem yalnız magaza nesnesinin kalem alanını verir. Çift nokta her derinlikte arar: $..fiyat hem kitapların hem kalemin fiyatlarını, toplam beş değeri döndürür. Alanın nerede olduğunu bilmiyorsanız .. kullanın.
Süzgeçte metin nasıl karşılaştırılır?
Metni tırnak içine yazın: $.magaza.kitap[?(@.kategori=='roman')].baslik üç roman başlığını verir. Birden çok koşulu && (ve) ya da || (veya) ile bağlayabilirsiniz: [?(@.kategori=='roman' && @.fiyat<150)]. Tırnak kapanmazsa araç bunu söyler.
JSON'um bir sunucuya gönderiliyor mu?
Hayır. JSON'un okunması ve ifadenin çalıştırılması tamamen tarayıcınızda yapılır; API anahtarı ya da müşteri verisi içeren bir yanıtı güvenle deneyebilirsiniz.