Ne işe yarar
JSONPath, JSON için bir sorgu dilidir; XML için XPath neyse JSON için odur. $.store.book[*].title gibi bir sorgu belgenin içinde ilerler ve ilgilendiğiniz değerleri seçer. Bu araç, yapıştırdığınız JSON üzerinde bir JSONPath ifadesi çalıştırır ve her eşleşmeyi bir JSON dizisi olarak listeler: bulunan değerler, normalleştirilmiş yolları (örneğin $['store']['book'][0]['title']) ya da her ikisi.
2024’te yayımlanan IETF standardı RFC 9535’i izler; bu yüzden sonuçlar JavaScript, Java, Python, Go ve diğer dillerdeki modern kütüphanelerle aynıdır. Bir sorguyu koda koymadan önce denemek, bir filtrenin neden hiçbir şey döndürmediğini bulmak ya da büyük bir API yanıtından birkaç alan çekmek için kullanın.
Nasıl kullanılır
- JSON’u JSON kutusuna yapıştırın, bir
.jsondosyası yükleyin veya klasik kitapçı belgesini yüklemek için Örnek’e tıklayın. - JSONPath ifadesi alanına bir sorgu yazın. Eşleşmeler siz yazdıkça güncellenir.
- Göster seçeneğinden değerleri, yolları veya yol/değer çiftlerini seçin.
- Sonucu kopyalayın veya indirin. Sorguda sözdizimi hatası varsa, ayrıştırmanın durduğu karakter belirtilir.
Sözdizimi özeti
| İfade | Anlamı |
|---|---|
$ | Belgenin kökü |
.name veya ['name'] | Bir nesnenin üyesi |
[0], [-1] | Bir dizi elemanı (negatifler sondan sayılır) |
[1:3], [::2] | Dilim: başlangıç, bitiş (hariç) ve adım |
* | Tüm üyeler veya elemanlar |
..name | Herhangi bir derinlikteki name |
[?@.price < 10] | Filtrenin doğru olduğu alt öğeler; @ geçerli öğedir |
Filtreler koşulları &&, || ve ! ile birleştirebilir, $ ile belgenin başka kısımlarıyla karşılaştırma yapabilir ve fonksiyon çağırabilir: length(@.tags) > 2, count(@.items[*]) == 0, dizenin tamamının düzenli ifadeyle eşleşmesi için match(@.code, '[A-Z]{3}'), herhangi bir yerde eşleşme için search(@.title, 'Ring').
Örnek
Örnek kitapçı verisinde bu sorgu fiyatı 10’dan düşük kitapların başlıklarını seçer:
$.store.book[?@.price < 10].title
ve şunu döndürür:
["Sayings of the Century", "Moby Dick"]
ISBN’i olan kitapların yazarlarını listelemek için $..book[?@.isbn].author, bisiklet dahil mağazadaki tüm fiyatları toplamak için $..price yazın.
SSS
› Hangi JSONPath sözdizimi destekleniyor?
RFC 9535 standart sözdizimi: nokta ve köşeli parantezle üye adları, joker karakter, dizi indeksleri (negatifler dahil), dilimler, .. ile her derinlikte arama, karşılaştırma ve && || ! içeren filtreler ile length(), count(), match(), search() ve value() fonksiyonları. Parantezler yalnızca gruplama yaptığı için eski ?(@.price < 10) yazımı da çalışır.
› Sorgum neden boş bir dizi döndürüyor?
Boş dizi, sorgunun geçerli olduğunu ama hiçbir şeyin eşleşmediğini gösterir. Üye adlarını (büyük/küçük harf duyarlı) ve bir değerin dizi mi nesne mi olduğunu kontrol edin. $..* gibi geniş bir sorguyu Göster: Yollar ile çalıştırarak belgede ne olduğunu görebilirsiniz.
› [(@.length-1)] gibi betik ifadeleri kullanabilir miyim?
Hayır. Betik ifadeleri rastgele kod çalıştırır ve standardın parçası değildir. Bunun yerine negatif indeks kullanın: [-1] son eleman, [-2:] son iki elemandır.
› JSON verim bir sunucuya gönderiliyor mu?
Hayır. Sorgu, sayfanın kendi kodu tarafından tarayıcınızda ayrıştırılır ve değerlendirilir; hiçbir şey yüklenmez.