Nasıl kullanılır?
- Örneği denemek için JSON belgesini JSON belgesi alanına yapıştırın ya da örneği olduğu gibi bırakın.
- JSONPath sorgusu alanına $ ile başlayan bir sorgu yazın. Filtreler köşeli parantez içinde yazılır: [[email protected] < 10].
- Eşleşme sayısını okuyun, sonra Eşleşmeler, sırasıyla tablosuna bakın: her satırda bir eşleşmenin yolu ve değeri vardır.
- Bir mesaj sorgudaki bir karakteri gösteriyorsa o karaktere bakın ve parantezi, tırnağı ya da noktayı düzeltin.
Sorgu düğümleri nasıl seçer
Bir sorgu $ işaretinden sonra gelen segmentlerin listesidir. .store ya da [0] gibi alt segmentler, ulaştıkları her düğümün çocuklarını seçer; ..author gibi tanımlayıcı segmentler düğümü ve bütün alt düğümlerini önce ziyaret eder. Bir segmentin düğümleri girdinin sırasıyla gelir ve bir dizi her zaman kendi sırasıyla okunur (RFC 9535, bölüm 2.5 ve 2.5.2.2).
Ad seçici yalnızca bir nesnedeki tam adla eşleşir. Negatif bir indeks diziyi sondan sayar; -1 son öğedir. [1:5:2] gibi bir dilim başlangıç, bitiş ve adım alır; adım 0 hiçbir şey seçmez (bölüm 2.3.4.2).
Filtreler, işlevler ve reddedilenler
Bir [?...] filtresi bir dizinin ya da nesnenin her çocuğunu test eder. Karşılaştırmalarda ==, !=, <, <=, > ve >= kullanılır; && , || ve ! testleri birleştirir, parantezler gruplar. Eksik bir üye Nothing'dir ve iki Nothing birbirine eşittir. Sayılar sayılarla, metinler metinlerle karşılaştırılır; farklı türden bir değer hiçbir zaman eşit değildir (bölüm 2.3.5.2).
length, count, value, match ve search işlevleri RFC 9535'in tanımladığı gibi desteklenir. match ve search, RFC 9485'in biçimi olan I-Regexp ile yazılmış bir düzenli ifade alır; geçerli bir I-Regexp olmayan bir kalıp hiçbir şeyle eşleşmez. Dizi ve nesne değişmezleri dilbilgisinde yoktur, bu yüzden araç bunları reddeder; RFC 9535 filtrede tek başına kullanılan bir işlev sonucunu tür açısından uygun bulmadığından, böyle bir kullanımı da reddeder.
Kitapçı örneği
Örnek belge ve $.store.book[[email protected] < 10].title sorgusuyla, 10'dan ucuz kitaplar birinci ve üçüncü kitaplardır. Aşağıdaki iki eşleşme bu kitapların başlıklarıdır; her birinin normalleştirilmiş yolu da gösterilir.
| Normalleştirilmiş yol | Değer (JSON) |
|---|---|
| $['store']['book'][0]['title'] | "Sayings of the Century" |
| $['store']['book'][2]['title'] | "Moby Dick" |
Sık sorulan sorular
Anahtar varken sorgu neden hiçbir şey döndürmüyor?
Ad seçici yalnızca bir nesnenin tam olarak o adlı üyesiyle eşleşir ve karşılaştırma büyük küçük harfe duyarlıdır. Bir dizinin öğesiyle asla eşleşmez; dizi için indeks ya da joker kullanın.
Filtrede 13 ile "13" neden eşit değil?
RFC 9535, farklı türden değerleri eşit olmayan sayar (bölüm 2.3.5.3). Bir sayı ile bir metin farklı değerlerdir; karakterleri aynı görünse bile == yanlış, != doğrudur.
Negatif bir indeks neyi seçer?
Negatif indeks diziyi sondan sayar: -1 son öğe, -2 ondan önceki öğedir. Dizinin dışındaki bir indeks hiçbir şey seçmez ve hata değildir (bölüm 2.3.3.2).
Filtrede tek başına length(@) yazınca araç neden reddediyor?
length bir sayı döndürür, filtre ise doğru ya da yanlış bir test ister. Sonucu karşılaştırın, örneğin [?length(@.title) > 15]; bu tür olarak uygundur.
Araç JSON'umu bir sunucuya gönderiyor mu?
Hayır. Belgeyi tarayıcınız JSON.parse ile okur, sorgu da orada çalışır ve hiçbir şey saklanmaz. Sayfa ağ isteği yapmaz.
Kaynaklar
- RFC 9535, JSONPath: Query Expressions for JSON, bölüm 1.5, 2.3, 2.4, 2.5 ve 2.7
- RFC 9485, I-Regexp: An Interoperable Regular Expression Format, bölüm 3 ve 5.3
Rakamlar ve metin en son 10 Kasım 2026 Salı tarihinde kontrol edildi.