Skip to content

Ücretsiz JSONPath Test Aracı — Çevrimiçi Değerlendirin

JSONPath ifadelerini herhangi bir JSON üzerinde anında test edin. RFC 9535 standart motoru ve Klasik Goessner modu, Değerler / Yollar / Her İkisi görünümleri, eval yok. %100 gizli çevrimiçi araç, tarayıcınızda çalışır.

Takip Yok Tarayıcıda Çalışır Ücretsiz
Tüm değerlendirme tarayıcınızda yerel olarak çalışır. JSON'unuz ve ifadeniz bu cihazdan asla ayrılmaz. Eval yok, yükleme yok.
Motor
 
JSONPath hile kâğıdı
$Kök öğe
@Geçerli öğe (filtrelerde)
.nameAlt öğe
..nameÖzyinelemeli iniş
[*]Tüm öğeler / üyeler
[0]Dizi dizini
[0:2]Dizi dilimi [start:end:step]
[a,b]Adların / dizinlerin birleşimi
[?(@.k>1)]Filtre ifadesi
length()RFC 9535 fonksiyonu: length / count / match / search / value
RFC 9535 dilbilgisi sadakati, normalleştirilmiş yol doğruluğu, ortak yollarda çift motor anlamsal eşliği ve uç durumlarda belgelenmiş ayrışma, eval'siz güvenlik (CVE-2024-21534 ve CVE-2025-1302'yi kapatarak) ve erişilebilirlik (ARIA rolleri, radiogroup motor geçişi, ekran okuyucu sonuç duyuruları, RTL düzenler altında LTR JSON işleme) için gözden geçirildi. — Go Tools Veri Araçları Ekibi · Jun 13, 2026

JSONPath Test Aracı Nedir?

Bir JSONPath test aracı, bir JSONPath ifadesi yazmanıza, bir JSON belgesi yapıştırmanıza ve ifadenin tam olarak hangi düğümleri seçtiğini — hem eşleşen değerleri hem de bunların kesin konumlarını — kod yazmadan ya da bir betik çalıştırmadan görmenize olanak tanıyan bir araçtır. Geliştiriciler için döngüyü dakikalardan milisaniyelere indirir: yolu ayarlayın, sonucun değişmesini izleyin ve sorguyu güvenle yayınlayın.

JSONPath, JSON için bir sorgu dilidir; XML için XPath'in JSON karşılığıdır. Bir ifade, küçük bir seçici alfabesinden kurulur. $ belgenin köküdür. Bir nokta ya da bir köşeli ayraç bir alt öğeye iner: $.store veya $['store']. Çift nokta .. özyinelemeli iniştir — ağacın her seviyesini arar. Joker karakter * tüm öğeleri ya da üyeleri seçer. Köşeli ayraçlar dizi dizinlerini ([0]), dilimleri ([start:end:step]), birleşimleri ([a,b]) ve filtre ifadelerini ([?(@.price < 10)], burada @ test edilen öğedir) taşır. Bu parçalarla derin biçimde iç içe geçmiş bir API yanıtından tek bir alanı çekebilir, testlerde değerler üzerinde doğrulama yapabilir, Kubernetes, AWS Step Functions ve Azure Logic Apps gibi sistemlerde veri dönüşümlerini sürdürebilir ya da düzensiz JSON'dan yapılandırılmış veri çıkarabilirsiniz — hepsi buyrultu temelli dolaşma kodu olmadan. JSONPath aynı zamanda uygulamalar arasında ünlü biçimde tutarsızdır; ki bu, iyi bir test aracının üretime ulaşmadan önce ortaya çıkardığı tam da bu sorundur.

Bu test aracı iki motorla gelir. Varsayılan, bir RFC 9535 motorudur: RFC 9535, IETF'in Şubat 2024 tarihli JSONPath resmi belirtimidir; dilin on beş yıllık ayrışan uygulamaların ardından ilk kez kesin biçimde standartlaştırılmasıdır. Kesin bir dilbilgisi, sonuçlar için normalleştirilmiş yollar kavramını ve beş standart fonksiyon tanımlar — length(), count(), match(), search(), value(). RFC 9535 motorumuz, eval kullanmayan sıfır bağımlılıklı bir uygulamadır; bu yüzden ifadeleri JavaScript'e derlemek yerine kendi dilbilgisiyle ayrıştırır ve yorumlar. İkinci motor, çoğu eski çevrimiçi aracın ve kitaplığın uyguladığı 2007 fiili lehçesi olan Klasik (Goessner)'dir; jsonpath.com gibi bir araçtan sonuçları yeniden üretmek ya da eski koddan kopyaladığınız bir ifadeyi çalıştırmak için ona geçin. İki lehçe ortak yollarda anlaşır ama uç durumlarda ayrışır — filtre boşluğu ve tırnak, birleşim sırası, eksik üyelerin nasıl karşılaştırıldığı ve hangi fonksiyonların var olduğu — bu yüzden ikisi arasında tek bir yerde geçiş yapabilmek, bir ifadenin neden beklediğinizden farklı davrandığını teşhis etmenin en hızlı yoludur.

Test aracının ham değerlerin ötesinde ortaya çıkardığı şey: bir JSONPath sorgusunun sonucu bir düğüm listesidir ve bu araç onu üç şekilde gösterebilir. Değerler görünümü eşleşen düğümleri bir JSON dizisi olarak işler; tam olarak kodda tüketeceğiniz şey. Yollar görünümü her eşleşmenin normalleştirilmiş yolunu işler — ifade nasıl yazılmış olursa olsun değerin belgede nerede yaşadığını benzersiz biçimde tanımlayan $['store']['book'][0]['title'] gibi kanonik, köşeli-ayraç-tırnaklı bir konum. Aynı düğümü seçen iki ifade aynı normalleştirilmiş yolu üretir; bu da Yollar görünümünü hata ayıklamak için paha biçilmez kılar. Her İkisi görünümü değerleri ve yolları yan yana gösterir. Bir istatistik satırı kaç düğümün eşleştiğini bildirir.

Güvenlik burada birinci sınıf bir kaygıdır. Birçok çevrimiçi JSONPath değerlendiricisi bir sunucuda çalışır ya da filtre yüklemlerini JavaScript eval ile değerlendiren bir kitaplık gömer — geniş çapta kullanılan JSONPath paketlerinde CVE-2024-21534 ve CVE-2025-1302 olarak izlenen uzaktan kod yürütme açıklarını üreten tasarım. Bu araç hiç eval kullanmaz. RFC 9535 motorunun eval yolu yoktur ve Klasik motor, eval'in açıkça devre dışı bırakıldığı yamalı, sabitlenmiş bir jsonpath-plus sürümü üzerine kuruludur. Bu, RCE hata sınıfını kapatır ve aracın unsafe-eval'i yasaklayan katı bir Content-Security-Policy altında çalışmasına izin verir. Her değerlendirme yereldir: JSON'unuz ve ifadeniz sayfadan asla ayrılmaz, asla günlüklenmez ve asla diske kaydedilmez — yalnızca motor ve görünüm tercihleriniz localStorage'a kalıcı olur. Bu, aracı tescilli API yükleri, redakte edilmiş günlükler, dahili yapılandırma ve sunucu destekli bir hizmete yapıştırmayacağınız bir şemaya sahip her veri için güvenli kılar.

JSON ile uğraşmak göreviniz ise bunu sitedeki diğer JSON araçlarıyla eşleştirin: girdinizi JSON Biçimlendirici ile biçimlendirip güzel yazdırın, iki belgeyi JSON Diff ile karşılaştırın, bir yükü JSON Şema Doğrulayıcı ile bir şemaya karşı kontrol edin ya da bir örnek yanıtı JSON'dan TypeScript'e ile türlü arabirimlere dönüştürün.

// The expression you build in this tester maps straight onto the
// RFC 9535 reference library used under the hood.
import { query, paths } from 'jsonpath-rfc9535';

const document = {
  store: {
    book: [
      { title: 'Sayings of the Century', author: 'Nigel Rees', price: 8.95 },
      { title: 'Sword of Honour', author: 'Evelyn Waugh', price: 12.99 },
      { title: 'Moby Dick', author: 'Herman Melville', price: 8.99 },
      { title: 'The Lord of the Rings', author: 'J. R. R. Tolkien', price: 22.99 }
    ]
  }
};

// Values: query(document, path) returns the matched values directly.
const titles = query(document, '$.store.book[*].title');
// → ['Sayings of the Century', 'Sword of Honour', 'Moby Dick', 'The Lord of the Rings']

// Filter: books cheaper than 10.
const cheap = query(document, '$.store.book[?(@.price < 10)].title');
// → ['Sayings of the Century', 'Moby Dick']

// Normalized paths: paths(document, path) returns where each match lives.
const authorPaths = paths(document, '$..author');
// → ["$['store']['book'][0]['author']", "$['store']['book'][1]['author']", ...]

// RFC 9535 functions like length() are used INSIDE filters, not as a segment.
const longTitles = query(document, '$.store.book[?length(@.title) > 15]');
// → the two books whose title is longer than 15 characters

Temel Özellikler

RFC 9535 Standart Motoru (Eval Yok)

Varsayılan motor, IETF'in 2024 resmi JSONPath belirtimi olan RFC 9535'i uygular — kesin dilbilgisi, normalleştirilmiş yollar ve beş standart fonksiyon. Sıfır bağımlılıklıdır ve hiç eval kullanmaz; bu yüzden ifadeleri JavaScript'e derlemek yerine kendi dilbilgisiyle ayrıştırır ve yorumlar. Katı bir Content-Security-Policy altında çalışır.

Klasik (Goessner) Uyumluluk Modu

Tek bir geçiş, Goessner uyumlu bir motora geçer (jsonpath-plus üzerine kurulu, eval devre dışı bırakılarak oluşturulmuş); böylece jsonpath.com gibi eski araçlardan kopyalanan ifadeler orada gördüğünüz şekilde davranır. Sonuçları karşılaştırmak ve bir yolun lehçeler arasında neden farklı eşleştiğini teşhis etmek için RFC 9535 ile Klasik arasında geçiş yapın.

Üç Sonuç Görünümü: Değerler, Yollar, Her İkisi

Değerler, eşleşen düğümleri bir JSON dizisi olarak işler; tam olarak kodda tükettiğiniz şey. Yollar, her eşleşmenin $['store']['book'][0]['title'] gibi normalleştirilmiş yolunu işler. Her İkisi, ikisini yan yana gösterir; böylece her değeri kesin konumuna eşleyebilirsiniz. Etkin görünüm oturumlar arasında kalıcı olur.

Her Eşleşme İçin Normalleştirilmiş Yollar

Her sonuç, kanonik, köşeli-ayraç-tırnaklı normalleştirilmiş yolunu taşır — ifade nasıl yazılmış olursa olsun bir düğümün konumunu benzersiz biçimde tanımlamanın RFC 9535 yoludur. Aynı düğüme isabet eden iki ifade aynı normalleştirilmiş yolu üretir; bu da belirsiz sorguların hata ayıklamasını basitleştirir.

Tam Seçici Desteği

Kök $, geçerli öğe @, alt öğe .name, özyinelemeli iniş ..name, joker karakter [*], dizi dizini [0], dilim [start:end:step], birleşim [a,b] ve karşılaştırma ve mantıksal operatörlü filtre [?()] ifadeleri. Yerleşik bir hile kâğıdı her seçiciyi belgeler; böylece birini aramak için sayfadan ayrılmanız gerekmez.

RFC 9535 Fonksiyon Uzantıları

length(), count(), match(), search() ve value()'yu ifadeler içinde çağırın — bir dizinin öğelerini sayın, bir dizeyi bir I-Regexp desenine karşı test edin ya da iç içe geçmiş bir listenin boyutuna göre filtreleyin. Bu standart fonksiyonlar varsayılan motorda mevcuttur; Klasik modda çağırırsanız araç size motor değiştirmenizi söyler.

Biçimlendir, Yükle ve Örnekler

JSON Biçimlendir, sorgulamadan önce yapı okunur olsun diye girdinizi güzel yazdırır. Yükle, bir .json veya .txt dosyasını tamamen tarayıcıda okur — asla hiçbir yere gönderilmez. Örnekler açılır menüsü, bir yolu uyarlamadan önce motorun çalıştığını görmeniz için örnek veriye karşı bilinen-iyi başlangıç ifadeleri yükler.

Kalıcı Bağlantı Paylaşımı (Yükleme Yok)

Bağlantıyı kopyala, JSON'u, ifadeyi, motoru ve görünümü URL hash'ine kodlar. Tarayıcılar URL parçalarını asla isteklerde iletmez; bu yüzden paylaşılan bir bağlantı, go-tools.org sunucularına dokunmadan tüm durumunuzu alıcının makinesinde yeniden üretir. Ortak hata ayıklama için kendi kendine yeten ve denetim dostu.

%100 Gizli, Yalnızca Tarayıcı

JSON'unuz ve ifadeniz cihazınızdan asla ayrılmaz. Ağ isteği yok, günlükleme yok, ne yazdığınızla ilgili analitik yok — DevTools → Network'te doğrulayın. Yalnızca motor ve görünüm tercihleri localStorage'a kalıcı olur. Tescilli yükler, redakte edilmiş günlükler ve jsonpath.com'a yapıştırmayacağınız herhangi bir veri için güvenli.

İşlenmiş Örnekler

Bir kitapçı belgesinden her kitabın başlığını seçin

$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]

Klasik Goessner kitapçı JSON'unu yapıştırın, ifadeyi yazın; Değerler görünümü dört başlığın tamamını içeren bir JSON dizisi döndürür. Her sonucu $['store']['book'][0]['title'] gibi normalleştirilmiş bir yol olarak görmek için Yollar görünümüne geçin. Joker karakter [*] book dizisinin her öğesini gezer; .title her birinden tek bir üyeyi yansıtır.

Bir filtre ifadesiyle 10'dan ucuz kitapları filtreleyin

$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]

Filtre seçici [?()] yalnızca yüklemin doğru olduğu dizi öğelerini tutar; @ geçerli öğedir. Kitapçı verisine karşı (fiyatlar 8.95, 12.99, 8.99, 22.99) iki kitap uygun çıkar. Her iki motor da bu biçimi kabul eder, ancak Klasik (Goessner) aynı filtreyi [?(@.price<10)] olarak yazar — eski bir araçtan bir ifade kopyaladıysanız motoru değiştirin.

Özyinelemeli iniş ile tüm ağacı dolaşın

$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]

.. operatörü belgenin her seviyesine iner ve iç içe geçme derinliğinden bağımsız olarak her author üyesini nerede bulunursa toplar. Özyinelemeli iniş, tam yolu açıkça yazmadan derin biçimde iç içe geçmiş ya da düzensiz bir yapıdan tek bir alanı çekmenin en hızlı yoludur.

Bir diziyi [start:end:step] ile dilimleyin

$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]

Dizi dilimleri, Python ve JavaScript ile aynı yarı açık [start:end] kuralını izler: 0. dizinden 2. dizine kadar (2 dahil değil) ilk iki kitabı döndürür. Adım için üçüncü bir alan ekleyin — $.store.book[::2] her ikincil öğeyi alır. Bitiş sınırı dışlayıcıdır; bu, Yollar görünümünün açıkça gösterdiği yaygın bir bir-hata-payı tuzağıdır.

RFC 9535 length() fonksiyonuyla başlık uzunluğuna göre filtreleyin

$.store.book[?length(@.title) > 15]
[{"title": "Sayings of the Century", "author": "Nigel Rees", "price": 8.95}, {"title": "The Lord of the Rings", "author": "J. R. R. Tolkien", "price": 22.99}]

length() beş RFC 9535 standart fonksiyonundan biridir ve yalnızca bir filtre ifadesi [?...] içinde geçerlidir — asla $.store.book.length() gibi bağımsız bir yol segmenti olarak değil; RFC 9535 dilbilgisi bunu reddeder (o segment biçimi standart JSONPath değil, bir jsonpath-plus uzantısıdır). Burada filtre, başlığı 15 karakterden uzun olan her kitabı tutar; kitapçı verisinde 15 karakterden uzun başlıklar seçilir (örneğin "Sayings of the Century" ve "The Lord of the Rings"), "Moby Dick" ve "Sword of Honour" gibi daha kısa olanlar dışlanır. count(), match(), search() ve value() de aynı şekilde filtreler içinde kullanılır. Bu fonksiyonlar bir RFC 9535 özelliğidir — kullanmak için standart motora geçin (varsayılan); Klasik (Goessner) modu bunları uygulamaz.

Adlandırılmış iki üyenin birleşimini seçin

$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]

Bir birleşim seçici [a,b] birden çok alt öğeyi tek bir ifadede toplar. Burada ilk kitabın hem başlığını hem de yazarını çeker. Birleşimler dizi dizinleriyle de çalışır — [0,2] birinci ve üçüncü öğeleri yakalar. Her İkisi görünümü, her değeri normalleştirilmiş yoluyla eşleştirir; böylece hangi üyenin hangi sonucu ürettiğini tam olarak görebilirsiniz.

JSONPath Test Aracı Nasıl Kullanılır

  1. 1

    JSON'unuzu yapıştırın veya yükleyin

    JSON'u girdi kutusuna bırakın, yapıştırın ya da diskten bir .json / .txt dosyası yüklemek için Yükle'ye tıklayın. JSON Biçimlendir belgeyi yeniden girintiler. Geçersiz JSON, sorgulamadan önce satır içinde bir ayrıştırıcı mesajıyla işaretlenir.

  2. 2

    Bir motor seçin

    RFC 9535 (2024 IETF standardı, eval yok) varsayılandır. Sonuçların orada gördüğünüzle eşleşmesi için jsonpath.com gibi eski bir araçtan kopyalanan bir ifade çalıştırıyorsanız Klasik (Goessner)'e geçin.

  3. 3

    JSONPath ifadenizi yazın

    Baştaki $ sizin için gösterilir. .store.book[*].title gibi bir alt öğe yolu, [0] gibi bir dizin, ..author gibi bir özyinelemeli iniş ya da [?(@.price < 10)] gibi bir filtre ile başlayın. Sonuçlar siz yazdıkça canlı güncellenir.

  4. 4

    Sonuç görünümünü değiştirin

    Değerler, eşleşen değerlerin bir JSON dizisini gösterir. Yollar, her eşleşmenin $['store']['book'][0]['title'] gibi normalleştirilmiş yolunu gösterir. Her İkisi, ikisini yan yana gösterir; böylece her değeri belgedeki tam konumuna eşleyebilirsiniz.

  5. 5

    Sonucu kopyalayın veya bir kalıcı bağlantı paylaşın

    Sonucu kopyala, çıktıyı panonuza bırakır. Bağlantıyı kopyala, JSON'u, ifadeyi, motoru ve görünümü bir URL hash'ine kodlar (yükleme yok); böylece bir iş arkadaşı tam sorguyu kendi makinesinde yerel olarak yeniden üretebilir.

Yaygın JSONPath Hataları

Baştaki $ kökünü unuttunuz

Her JSONPath ifadesi kökten başlar, $ olarak yazılır. Onu atlamak (ya da yolu $ örtükmüş gibi yazmak) çoğu motorun ifadeyi reddetmesine yol açar. Test aracı $'ı sizin için gösterir; bu yüzden girdinizi bir sonraki seçiciyle başlatın — bir nokta, bir köşeli ayraç ya da bir özyinelemeli iniş.

✗ Yanlış
store.book[*].title  →  invalid (no root)
✓ Doğru
$.store.book[*].title  →  selects every title

Bir-hata-payı dilim — bitiş dizininin dâhil olmasını beklediniz

Dilimler yarı açıktır: [start:end] end'e kadar (end dahil değil) çalışır. [0:2] iki öğe döndürür (0 ve 1 dizinleri), üç değil. Son öğeyi dizinle dâhil etmek için [start:] kullanın ya da bitiş sınırını bir ileri itin.

✗ Yanlış
$.store.book[0:2]  →  first TWO books, not three
✓ Doğru
$.store.book[0:3]  →  first three books (indices 0,1,2)

RFC 9535 motorunda bir Klasik ifade kullandınız (ya da tersi)

jsonpath.com ya da jsonpath-plus'tan kopyalanan bir ifade, filtre, birleşim ve fonksiyon farkları nedeniyle RFC 9535 altında farklı ayrıştırılabilir ya da eşleşebilir. Sonuçlar yanlış görünüyorsa, ifadenin yazıldığı lehçeye uydurmak için motor geçişini değiştirin.

✗ Yanlış
Classic filter run under RFC 9535  →  parse error or unexpected nodes
✓ Doğru
Switch engine to Classic (Goessner)  →  reproduces the original result

Bir RFC 9535 fonksiyonunu bağımsız bir segment olarak çağırdınız

length(), count(), match(), search() ve value(), yalnızca bir filtre [?...] içinde geçerli olan RFC 9535 fonksiyon uzantılarıdır. $.store.book.length() gibi bağımsız bir segment çağrısı RFC 9535 dilbilgisi tarafından reddedilir (bu bir jsonpath-plus uzantısıdır, standart değil). Fonksiyonu bir filtre içinde çağırın ve varsayılan RFC 9535 motorunu kullanın — Klasik (Goessner) motoru bu fonksiyonları uygulamaz.

✗ Yanlış
$.store.book.length()  →  parse error (not a valid RFC 9535 segment)
✓ Doğru
$.store.book[?length(@.title) > 15]  →  books with a title over 15 chars

Bir filtre ifadesi içinde @ unuttunuz

Bir filtre [?()] içinde geçerli öğe @'dir, $ değil. $.price yazmak, test edilen öğe yerine belge köküne geri atıfta bulunur; bu yüzden filtre hiçbir şey ya da her şeyi seçer. Filtrelenen öğenin üyelerini adreslemek için @ kullanın.

✗ Yanlış
$.store.book[?($.price < 10)]  →  wrong scope
✓ Doğru
$.store.book[?(@.price < 10)]  →  books under 10

Bir üye adını yanlış söz dizimiyle tırnakladınız

Köşeli ayraç gösterimi dize anahtarlarının çevresinde tırnak gerektirir: $['store'] veya $.store her ikisi de çalışır, ama $[store] (köşeli ayraçta tırnaksız) bir dizin/tanımlayıcı hatasıdır. Boşluk, nokta ya da özel karakter içeren herhangi bir anahtar için köşeli ayraç içinde tırnak kullanın: $['first name'].

✗ Yanlış
$[store][book]  →  invalid bracket selectors
✓ Doğru
$['store']['book']  →  same as $.store.book

Özyinelemeli inişin ilk seviyede durmasını beklediniz

$..author en üstte durmaz — her derinlikteki her author üyesini toplar. Yalnızca doğrudan alt öğeleri istiyorsanız yolu açıkça yazın. Büyük bir belge üzerinde özyinelemeli iniş, amaçlanandan çok daha fazla düğüm döndürebilir.

✗ Yanlış
$..price  →  every price anywhere in the tree
✓ Doğru
$.store.book[*].price  →  only book prices

Bu Aracı Kimler Kullanır

Bir API Yanıtından Alanları Çıkarın
İstek kimliklerini, iç içe geçmiş kaynak özniteliklerini ya da bir JSON yükünden bir ad listesini dolaşma kodu yazmadan çekin. Yolu burada bir örnek yanıta karşı kurun, Değerler görünümünde tam olarak istediğiniz düğümleri döndürdüğünü onaylayın, ardından doğrulanmış ifadeyi uygulamanıza ya da testinize yapıştırın.
Entegrasyon Testleri İçin Doğrulamalar Yazın
Birçok test çerçevesi ve sözleşme testi aracı (REST Assured, Karate, Postman) yanıt gövdelerinde doğrulama yapmak için JSONPath kullanır. Doğrulama yolunu burada taslaklayın, gerçek bir yanıta karşı doğru düğümü seçtiğini doğrulayın ve testinize kopyalayın — yanlış bir yolu süit kırmızıya dönmeden yakalayarak.
İşlem Hatlarında Veri Dönüşümlerini Yapılandırın
Kubernetes, AWS Step Functions, Azure Logic Apps ve birçok ETL aracı, olay yüklerindeki alanları adreslemek için JSONPath kabul eder. Tam yolu burada temsilî bir olaya karşı prototipleyin, çözümlendiğini onaylayın ve amaçladığınız yeri gösterdiğine güvenerek işlem hattı yapılandırmanıza bırakın.
Bir jsonpath.com Sonucunu Gizli Olarak Yeniden Üretin
Sunucu destekli bir değerlendiriciden bir ifadeniz var ama verinizi üçüncü taraf bir siteye yapıştıramıyor musunuz? Klasik (Goessner) moduna geçin, JSON'unuzu yükleyin ve aynı sonucu yerel olarak yeniden üretin — hiçbir yük tarayıcınızdan ayrılmaz, böylece tescilli veri makinenizde kalır.
Eski İfadeleri RFC 9535'e Taşıyın
RFC 9535 uyumluluğu duyuran bir sisteme mi geçiyorsunuz? Eski bir ifadeyi Klasik modda çalıştırın, ardından hâlâ ayrıştırılıp aynı düğümleri eşleştiriyor mu görmek için RFC 9535 motoruna geçin. Çift motor karşılaştırması, aksi takdirde üretimde karşılaşacağınız filtre, birleşim ve fonksiyon farklarını saptar.
Bir Yolun Neden Yanlış Düğümleri Döndürdüğünü Ayıklayın
Çok fazla ya da çok az seçen bir yol, yalnızca değerlerden akıl yürütmek için zordur. Her eşleşmenin normalleştirilmiş konumunu görmek için Yollar görünümüne geçin — tam dizi dizini, tam üye zinciri — ve bir-hata-payı dilimi ya da serseri özyinelemeli iniş hemen belirginleşir.
JSONPath Öğretin veya Gözden Geçirin
Örnek veriye karşı çalışan bir ifade açın ve onu seçici seçici inceleyin, Değerler ile Yollar arasında geçiş yapın; böylece öğrenen hem neyin seçildiğini hem de nerede yaşadığını görür. Hile kâğıdı ve işlenmiş örnekler, kod incelemesi ya da işe alıştırma için yapılandırılmış bir referans sağlar.

Motor ve Algoritma Notları

RFC 9535 Motoru (jsonpath-rfc9535, Sıfır Bağımlılık)
Varsayılan motor IETF RFC 9535 dilbilgisini doğrudan uygular: ifadeyi belirteçlere ayırıp soyut bir söz dizimi ağacına ayrıştırır ve onu belgeye karşı yorumlar. Yolun hiçbir yerinde eval ve Function yapıcısı yoktur; bu yüzden eval-enjeksiyonu hata sınıfına karşı bağışıktır ve katı bir Content-Security-Policy altında çalışır.
Klasik Motor (jsonpath-plus, eval Devre Dışı)
Klasik (Goessner) motoru, yamalı bir sürüme (>= 10.4.0) sabitlenmiş ve eval seçeneği açıkça false'a ayarlanarak oluşturulmuş jsonpath-plus'tır. Bu, kitaplığın varsayılan eval tabanlı filtre yolunu etkileyen CVE-2024-21534 ve CVE-2025-1302 olarak izlenen uzaktan kod yürütme vektörlerini kapatırken Goessner lehçesi uyumluluğunu korur.
Normalleştirilmiş Yol Üretimi
Her eşleşme, RFC 9535 normalleştirilmiş yoluyla bildirilir — dizi dizinleri çıplak tam sayı olarak, tek tırnaklı köşeli ayraç gösterimi kullanan kanonik bir biçim ($['store']['book'][0]['title']). Normalleştirilmiş yollar düğüm başına kararlı ve benzersizdir; bu yüzden eşdeğer ifadeler özdeş yollar üretir; Yollar ve Her İkisi görünümleri belirsiz olmayan sonuç tanımlaması için buna güvenir.
Tembel Yüklenen Motor Parçaları
Her iki motor da yalnızca ilk seçildiğinde ayrı JavaScript parçaları olarak yüklenir; böylece başlangıç sayfası hafif kalır ve kullanmadığınız motor asla indirilmez. Motor değiştirmek, mevcut ifadeyi mevcut belgeye karşı sayfa yeniden yüklemesi olmadan hemen yeniden değerlendirir.
Yerel Dosya Okuma ve JSON Biçimlendirme
Yükle düğmesi, bir .json veya .txt dosyasını tamamen istemci tarafında girdiye okumak için tarayıcı FileReader API'sini kullanır — dosya asla iletilmez. JSON Biçimlendir, girdiyi iki boşlukluk girinti ile ayrıştırıp yeniden seri hâle getirir ve ayrıştırma hatalarını satır içinde gösterir; böylece bozuk JSON değerlendirmeden önce yakalanır.
URL Hash Aracılığıyla Kalıcı Bağlantılar (Asla İletilmez)
Paylaşım durumu, JSON'u, ifadeyi, etkin motoru ve sonuç görünümünü taşıyan location.hash parçasında kodlanır. Tarayıcılar parçayı HTTP isteklerine asla dâhil etmez; bu yüzden bir kalıcı bağlantı açıldığında go-tools.org sunucuları sıfır veri alır; doldurma tamamen alıcının cihazında gerçekleşir.

JSONPath En İyi Uygulamaları

Hedefinize Uyan Motoru Seçin
Aşağı akış sisteminiz RFC 9535 uyumluluğu duyuruyorsa RFC 9535 motoruna karşı yazın ve doğrulayın. Eski bir araç ya da kitaplıktan bir ifadeyi yeniden üretiyor ya da sürdürüyorsanız Klasik (Goessner) kullanın. Yanlış lehçeye karşı doğrulamak, test aracında çalışan bir yolun üretimde başarısız olmasının en yaygın nedenidir.
Yalnızca Değerlerle Değil, Yollar Görünümüyle Doğrulayın
Değerler görünümü neyin eşleştiğini söyler; Yollar görünümü nerede olduğunu söyler. Bir sorgu doğru görünen değerler döndürdüğünde bile bunları yanlış konumdan seçiyor olabilir — serseri bir özyinelemeli iniş ya da aşırı geniş bir joker karakter. İfadenin tam olarak amaçladığınız düğümlere isabet ettiğini onaylamak için normalleştirilmiş yolları kontrol edin.
Bir Dilimin Dışlayıcı Bitişine Dikkat Edin
[0:2] 0 ve 1 dizinlerini seçer, 0'dan 2'ye kadarını değil — bitiş sınırı dışlayıcıdır, tıpkı Python ve JavaScript gibi. Bir-hata-payı dilim hataları en sık görülen JSONPath hatasıdır. Seçilen her öğenin tam dizinini okumak ve yayınlamadan önce sınırı onaylamak için Yollar görünümünü kullanın.
Yapabildiğinizde Özyinelemeli İniş Yerine Açık Bir Yol Tercih Edin
$..price kullanışlıdır ama belgenin herhangi bir yerindeki her fiyatı eşleştirir, amaçlamadıklarınız dâhil. Yapıyı bildiğinizde yolu açıkça yazın ($.store.book[*].price); böylece sorgu veri büyüdükçe kesin ve öngörülebilir kalır. .. operatörünü gerçekten düzensiz ya da bilinmeyen biçimler için saklayın.
Filtrelerde Boşluk ve Tırnağı Tutarlı Tutun
RFC 9535 filtre ifadeleri için dilbilgisini tam olarak izlerken klasik lehçe daha gevşektir. Filtreleri temiz yazın — dize değişmezlerini tek tırnakla ('fiction') tırnaklayın, operatörleri boşluklu tutun ve hoşgörülü ayrıştırmaya güvenmekten kaçının — böylece aynı ifade, sonunda hangi motor ya da kitaplık çalıştırırsa çalıştırsın aynı şekilde değerlendirilir.

Sıkça Sorulan Sorular

JSON'um veya JSONPath ifadem sunucunuza gönderiliyor mu?
Hayır. Her değerlendirme tarayıcınız içindeki JavaScript'te çalışır. JSON belgeniz ve JSONPath ifadeniz yüklenmez, günlüklenmez, diske kaydedilmez ve hiçbir üçüncü tarafa gönderilmez. Yalnızca arayüz tercihleriniz — etkin motor (RFC 9535 veya Klasik) ve sonuç görünümü (Değerler / Yollar / Her İkisi) — sayfanın bir sonraki ziyarette hatırlaması için localStorage'a kaydedilir; JSON ve ifadenin kendisi asla kalıcı kılınmaz. Doğrulamak için DevTools → Network'ü açabilirsiniz: her iki kutuya da yazmak sıfır istek tetikler. Bu, aracı tescilli API yükleri, redakte edilmiş günlük örnekleri, dahili yapılandırma ve jsonpath.com gibi sunucu destekli bir değerlendiriciye yapıştırmayacağınız her şey için güvenli kılar.
JSONPath nedir ve ne için kullanılır?
JSONPath, XPath'in XML için bir sorgu dili olması gibi JSON için bir sorgu dilidir. Bir yol ifadesi yazarsınız — örneğin $.store.book[*].author — ve değerlendirici, yolun seçtiği her değeri belgede döndürür. API yanıtlarından belirli alanları çekmek, entegrasyon testlerinde değerler üzerinde doğrulama yapmak, Jenkins, Kubernetes, AWS Step Functions ve Azure Logic Apps gibi araçlarda veri dönüşümlerini yapılandırmak ve buyrultu temelli dolaşma kodu yazmadan büyük veya düzensiz JSON'dan veri çıkarmak için kullanılır. Bir ifade, seçicilerden oluşan bir eksenden kurulur: $ (kök), . veya [] (alt öğe erişimi), .. (özyinelemeli iniş), * (joker karakter), [start:end:step] (dizi dilimi), [a,b] (birleşim) ve [?()] (filtre). Bu test aracı ifadeyi canlı değerlendirir ve hem eşleşen değerleri hem de bunların normalleştirilmiş yollarını gösterir.
RFC 9535 ile klasik Goessner söz dizimi arasındaki fark nedir?
Klasik JSONPath, Stefan Goessner'ın 2007'de yayımladığı fiili söz dizimidir. Geniş çapta uygulandı ancak hiçbir zaman resmen standartlaştırılmadı; bu yüzden filtrelerin nasıl yazıldığı, birleşimlerin ve kök fonksiyonunun nasıl çalıştığı, eksik değerlerin nasıl karşılaştırıldığı gibi ince davranışlar kitaplıklar arasında ayrıştı. IETF'in Şubat 2024'te yayımladığı RFC 9535, JSONPath'in ilk resmi belirtimidir. Kesin bir dilbilgisi belirler, sonuçlar için normalleştirilmiş yollar tanımlar ve standart fonksiyonlar (length, count, match, search, value) ekler. İkisi birbirine yakındır ama özdeş değildir: RFC 9535 filtrelerde boşluk ve tırnak konusunda daha katıdır, eksik üyeler için karşılaştırma semantiğini tanımlar ve klasik lehçenin hoş gördüğü bazı gevşek yapıları reddeder. Bu araç varsayılan olarak RFC 9535 motorunu (sıfır bağımlılıklı, eval'siz bir uygulama) kullanır ve geriye dönük uyumluluk için Klasik (Goessner) motoruna geçmenize izin verir.
Aynı ifade neden iki motorda farklı sonuçlar döndürüyor ve jsonpath.com'dan kopyalanan bir ifadeyi nasıl kullanırım?
Çünkü RFC 9535 ile klasik Goessner lehçesinin uç durumlarda gerçekten farklı kuralları vardır — filtre boşluğu ve tırnak, birleşim sırası, eksik üyelerin nasıl karşılaştırıldığı ve hangi fonksiyonların var olduğu. Bir motor için yazılmış bir ifade diğerinde farklı eşleşebilir (ya da ayrıştırılamayabilir). jsonpath.com, jsonpath-plus veya Jayway tabanlı bir hizmet gibi eski bir araçtan bir ifade kopyaladıysanız, üstteki motor geçişini Klasik (Goessner) olarak değiştirin: o mod Goessner uyumlu bir değerlendirici çalıştırır (jsonpath-plus üzerine kuruludur, eval devre dışı bırakılarak oluşturulmuştur) ve kaynak araçta gördüğünüz davranışı yeniden üretir. Yeni bir ifade yazıyorsanız ya da RFC 9535 uyumluluğu duyuran bir sistemi hedefliyorsanız varsayılan RFC 9535 motorunu kullanın. Hile kâğıdı ve yerleşik örnekler, her iki motorda aynı şekilde değerlendirilecek biçimde yazılmıştır; böylece bilinen-iyi bir başlangıç noktanız olur.
Filtre ifadeleri [?()] nasıl çalışır?
Bir filtre seçici, yalnızca bir yüklemin doğru olduğu dizi öğelerini (veya nesne üyelerini) tutar. Filtre içinde @, test edilen geçerli öğeye atıfta bulunur. $.store.book[?(@.price < 10)] fiyat üyesi 10'dan küçük olan her kitabı döndürür. Değişmezlerle karşılaştırabilir (@.isbn, @.category == 'fiction'), koşulları && ve || ile birleştirebilir, bir üyenin varlığını test edebilir (@.isbn yalnızca bir isbn'i olan öğeleri seçer) ve RFC 9535'te yüklem içinde fonksiyon uzantılarını kullanabilirsiniz (?(length(@.tags) > 2)). Karşılaştırma operatörleri ==, !=, <, <=, >, >='dir. RFC 9535 türler konusunda kesindir: eksik bir üyeyi bir değerle karşılaştırmak iyi tanımlanmıştır ve hata fırlatmaz. Klasik lehçe boşluk konusunda daha gevşektir; bu yüzden orada [?(@.price<10)] ve [?(@.price < 10)] her ikisi de kabul edilir; RFC 9535 dilbilgisini tam olarak izler.
Özyinelemeli iniş (..) ne yapar?
.. operatörü yalnızca doğrudan alt öğeleri değil, belgenin her seviyesini arar. $..author her author üyesini nerede bulunursa toplar — üst düzey nesnenin içinde, dizilerin içinde, iç içe geçmiş nesnelerin içinde, herhangi bir derinlikte. Tam yolu açıkça yazmak istemediğinizde (veya yazamadığınızda) derin biçimde iç içe geçmiş ya da düzensiz biçimli bir yapıdan bir alanı çıkarmanın en hızlı yoludur. .. ardından herhangi bir seçici kullanabilirsiniz: $..book[*] ağacın herhangi bir yerindeki her book dizisinin her öğesini bulur, $..* belgedeki her değeri sıralar ve $..['price'] tüm price üyelerini toplar. Özyinelemeli iniş çok şey eşleştirebilir — her sonucun normalleştirilmiş yoluyla tam olarak nereden geldiğini görmek için Yollar görünümüne geçin.
RFC 9535 fonksiyonları length(), count(), match(), search() ve value() nedir?
RFC 9535 beş standart fonksiyon uzantısı tanımlar ve temel kural, bunların yalnızca bir filtre ifadesi [?...] içinde çağrılabilir olmasıdır — asla bağımsız bir yol segmenti olarak değil. $.store.book.length() yazmak geçerli RFC 9535 değildir ve standart dilbilgisi bunu reddeder (o segment-çağrı biçimi belirtimin parçası değil, bir jsonpath-plus uzantısıdır). length() bir dizenin, dizinin veya nesnenin uzunluğunu döndürür; bu yüzden boyuta göre filtrelemek için kullanırsınız: $.store.book[?length(@.title) > 15] başlığı 15 karakterden uzun kitapları tutar. count() bir düğüm listesinin içerdiği düğüm sayısını döndürür, yine bir filtre içinde: $.store.book[?(count(@.authors) > 1)]. match() bir dizenin tüm değere karşı bir düzenli ifadeyle eşleşip eşleşmediğini test eder, search() ise dize içinde herhangi bir yerde eşleşme arar — her ikisi de bir I-Regexp deseni alır. value() tek düğümlü bir düğüm listesini değerine dönüştürür; böylece bir karşılaştırmada kullanılabilir. Bu fonksiyonlar RFC 9535 standardının parçasıdır, bu yüzden varsayılan motorda mevcuttur; Klasik (Goessner) motoru bunları uygulamaz. Fonksiyon tabanlı bir ifade başarısız olursa, onu bir filtre içinde çağırdığınızı ve motor geçişinin RFC 9535'e ayarlı olduğunu doğrulayın.
Dizi dilimleri [start:end:step] nasıl çalışır?
Dilimler, Python ve JavaScript ile aynı yarı açık kuralı kullanır: [start:end] start dizininden end dizinine kadar (end dahil değil) seçer; bu yüzden [0:2] ilk iki öğeyi döndürür (0 ve 1 dizinleri). Kenara kadar gitmek için bir sınırı atlayın — [2:] 2. dizinden itibaren, [:3] ilk üç için. Negatif bir dizin sondan sayar: [-1:] son öğeyi seçer. İsteğe bağlı üçüncü alan bir adımdır — [::2] her ikincil öğeyi alır, [::-1] tersine çevirir (negatif adımları destekleyen motorlarda). Dışlayıcı bitiş sınırı en yaygın tek dilim hatasıdır; Yollar görünümü seçilen her öğenin tam dizinini gösterir; böylece sınırı bir bakışta onaylayabilirsiniz.
Birleşim seçici nedir ve aynı anda birden çok anahtarı nasıl seçerim?
Bir birleşim seçici, tek bir köşeli ayraç içinde birden çok ad veya dizin listeler ve tümünü toplar: $['title','author'] bir nesneden her iki üyeyi seçer ve $.store.book[0,2] book dizisinin birinci ve üçüncü öğelerini seçer. Onu diğer seçicilerle karıştırabilirsiniz — $.store.book[*]['title','price'] her kitabın başlığını ve fiyatını çeker. Birleşimler, bütün bir nesne ya da bir joker karakter yerine birkaç alanın sabit bir izdüşümünü istediğinizde kullanışlıdır. Her İkisi görünümü, bir birleşim sonucunu okumanın en açık yoludur; çünkü seçilen her değeri normalleştirilmiş yoluyla eşleştirir; böylece her girdiyi hangi adın veya dizinin ürettiğini anlayabilirsiniz.
Bir JSONPath sorgusunu ve JSON'unu bir bağlantı aracılığıyla paylaşabilir miyim?
Evet — ve bağlantı hiçbir sunucu gidiş gelişi içermez. Eylem çubuğunda Bağlantıyı kopyala'ya tıklayın: test aracı JSON'u, ifadeyi, etkin motoru ve sonuç görünümünü URL hash'ine kodlar. Bağlantıyı açan herkes sayfayı kendi makinesinde yerel olarak aynı durumla doldurur. Veriler hash parçasında yaşadığı için go-tools.org sunucusuna asla iletilmez — tarayıcılar parçayı HTTP isteklerinde göndermez — ve erişim günlüklerimizde asla görünmez. Bağlantı uzunluğu JSON'un boyutuyla büyür; bu yüzden büyük belgeler için yalnızca ifadeyi paylaşın ve alıcının kendi verisini yapıştırmasına izin verin ya da bir dosyayı yerel olarak yüklemek için Yükle düğmesini kullanın. Bu, kalıcı bağlantıları yükü herhangi bir arka uca açmadan ortak hata ayıklama için güvenli kılar.
Bir azami JSON boyutu var mı?
Değerlendirme, katı bir üst sınırdan ziyade tarayıcınızın belleğiyle sınırlıdır, ancak pratik en uygun nokta birkaç megabayta kadar olan belgelerdir — neredeyse her tekil API yanıtından rahatça daha büyük. Geniş seçicili çok büyük diziler (on binlerce düğüm üzerinde bir $..* özyinelemeli joker karakteri) işlenmesi daha uzun süren büyük bir sonuç kümesi üretir; çıktıyı okunur tutmak için ifadeyi daraltın. Yükle düğmesi bir .json veya .txt dosyasını tamamen tarayıcıda okur (asla hiçbir yere gönderilmez) ve JSON Biçimlendir, sorgulamadan önce yapıyı okuyabilmeniz için girdiyi yeniden girintiler. Çok megabaytlık veri işlem hatları için ifadenizi burada temsilî bir dilime karşı doğrulayın, ardından aynı yolu uygulama kodunuzda ya da jq gibi bir CLI aracında çalıştırın.
Bu, jsonpath.com'dan nasıl farklı ve güvenli mi — eval yok mu?
Dört fark. (1) Gizlilik: jsonpath.com ve çoğu çevrimiçi değerlendirici bir sunucuda çalışır ya da filtreleri JavaScript eval ile değerlendiren bir kitaplık gömer; bu araç tamamen tarayıcınızda çalışır ve hiç eval kullanmaz. Varsayılan RFC 9535 motoru eval yolu olmayan sıfır bağımlılıklı bir uygulamadır ve Klasik (Goessner) motoru, eval'in açıkça devre dışı bırakıldığı yamalı bir sürüme sabitlenmiş jsonpath-plus üzerine kuruludur — CVE-2024-21534 ve CVE-2025-1302 olarak izlenen uzaktan kod yürütme hatası sınıfını kapatır. Bu aynı zamanda aracın katı bir Content-Security-Policy altında çalıştığı anlamına gelir. (2) Standartlar: bu, yalnızca eski Goessner lehçesini değil, gerçek bir RFC 9535 motoru sunan az sayıdaki çevrimiçi test aracından biridir. (3) Çift motor: sonuçları karşılaştırmak ya da eski araçlardan kopyalanan ifadeleri yan yana çalıştırmak için RFC 9535 ile Klasik arasında geçiş yapabilirsiniz. (4) Diller: arayüz 15 dilde mevcuttur. Yalnızca hızlı eski-söz dizimi kontrollerine ihtiyacınız varsa jsonpath.com hâlâ çalışır; standartlara uygun, gizli, eval'siz değerlendirme için bu, daha güvenli seçimdir.
Değerler, Yollar ve Her İkisi görünümleri neyi gösterir?
Bir JSONPath sorgusunun sonucu bir düğüm listesidir — belgenizin içindeki bir düğüm kümesi. Değerler görünümü, o düğümleri eşleşen değerlerin bir JSON dizisi olarak işler; tam olarak kodda tüketeceğiniz şey. Yollar görünümü bunun yerine her eşleşmenin normalleştirilmiş yolunu işler — ifadenizin nasıl yazıldığından bağımsız olarak değerin belgede nerede yaşadığını benzersiz biçimde tanımlayan $['store']['book'][0]['title'] gibi kanonik, köşeli-ayraç-tırnaklı bir konum. Normalleştirilmiş yollar bir RFC 9535 kavramıdır ve hata ayıklamak için paha biçilmezdir: aynı düğümü seçen iki farklı ifade aynı normalleştirilmiş yolu üretir. Her İkisi görünümü ikisini yan yana gösterir; böylece her değeri konumuyla bir bakışta eşleştirebilirsiniz. Seçtiğiniz görünüm localStorage aracılığıyla oturumlar arasında kalıcı olur.
Bu çevrimdışı çalışır mı ve Content-Security-Policy konusunda durum nedir?
Her iki açıdan da evet. Her değerlendirme ağ çağrısı olmadan tarayıcınızda çalıştığı için, sayfa yüklendikten sonra çevrimdışına geçseniz bile araç çalışmaya devam eder. Ve hiçbir motor filtre ifadelerini değerlendirmek için eval ya da Function yapıcısını kullanmadığı için, araç unsafe-eval'i yasaklayan katı bir Content-Security-Policy altında çalışır — güvenlik bilincine sahip birçok kuruluşun zorunlu kıldığı ve eval tabanlı JSONPath kitaplıklarını bozan ilke. RFC 9535 motoru ifadeleri JavaScript'e derlemek yerine kendi dilbilgisiyle ayrıştırır ve yorumlar ve Klasik motor eval devre dışı bırakılarak yapılandırılmıştır. JSONPath'i sertleştirilmiş bir dahili ortamda değerlendirmeniz gerekiyorsa, bu araç orada ilke istisnaları olmadan çalışacak biçimde tasarlanmıştır.