Ü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.
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
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
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
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
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
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ş.
store.book[*].title → invalid (no root)
$.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.
$.store.book[0:2] → first TWO books, not three
$.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.
Classic filter run under RFC 9535 → parse error or unexpected nodes
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.
$.store.book.length() → parse error (not a valid RFC 9535 segment)
$.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.
$.store.book[?($.price < 10)] → wrong scope
$.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'].
$[store][book] → invalid bracket selectors
$['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.
$..price → every price anywhere in the tree
$.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?
JSONPath nedir ve ne için kullanılır?
RFC 9535 ile klasik Goessner söz dizimi arasındaki fark nedir?
Aynı ifade neden iki motorda farklı sonuçlar döndürüyor ve jsonpath.com'dan kopyalanan bir ifadeyi nasıl kullanırım?
Filtre ifadeleri [?()] nasıl çalışır?
Özyinelemeli iniş (..) ne yapar?
RFC 9535 fonksiyonları length(), count(), match(), search() ve value() nedir?
Dizi dilimleri [start:end:step] nasıl çalışır?
Birleşim seçici nedir ve aynı anda birden çok anahtarı nasıl seçerim?
Bir JSONPath sorgusunu ve JSON'unu bir bağlantı aracılığıyla paylaşabilir miyim?
Bir azami JSON boyutu var mı?
Bu, jsonpath.com'dan nasıl farklı ve güvenli mi — eval yok mu?
Değerler, Yollar ve Her İkisi görünümleri neyi gösterir?
Bu çevrimdışı çalışır mı ve Content-Security-Policy konusunda durum nedir?
İlgili Araçlar
Tüm araçları görüntüleyin →Base64 Çözücü ve Kodlayıcı
Kodlama ve Biçimlendirme
Base64'ü ücretsiz çevrimiçi kodlayın ve çözün. Tam UTF-8 ve emoji desteğiyle gerçek zamanlı dönüştürme. %100 tarayıcıda — kayıt gerekmez.
Base64'ü Görsele Çevirme Aracı
Kodlama ve Biçimlendirme
Bir Base64 dizesini ya da data URI'yi tarayıcınızda görsele geri çözün. Önizleyin, boyutları ve MIME'ı okuyun, ardından PNG, JPG, GIF, SVG olarak indirin. Yükleme yok.
CSV'den JSON'a Dönüştürücü
Kodlama ve Biçimlendirme
CSV'yi tarayıcınızda JSON'a dönüştürün. RFC 4180, tür çıkarımı, başlık satırı, büyük tam sayı güvenli. %100 gizli, yükleme yok.
.env'den JSON'a Dönüştürücü
Kodlama ve Biçimlendirme
Bir .env dosyası yapıştırın, anında JSON alın. Sırlarınız tarayıcınızdan asla çıkmaz — %100 gizli, yükleme yok, ücretsiz dotenv ayrıştırıcı.
HTML'den Markdown'a Dönüştürücü
Kodlama ve Biçimlendirme
HTML'i tarayıcınızda temiz Markdown'a çevirin — GFM tabloları, görev listeleri ve bağlantılar. ATX/Setext başlıkları ile satır içi veya referans bağlantıları seçin. Web içeriği taşıma ya da LLM için ideal. %100 gizli.
Görseli Base64'e Çevirme Aracı
Kodlama ve Biçimlendirme
Görselleri tarayıcınızda Base64 data URI'lerine çevirin — PNG, JPG, GIF, WebP, SVG, ICO. HTML, CSS, Markdown ve JSON çıktısını kopyalayın. %100 gizli, yükleme yok.