ToolDeck

JSONPath Test Aracı

JSONPath ifadelerini JSON verisi üzerinde test edin ve eşleşen sonuçları görün

Örnek dene

JSON Girişi

Sonuçlar

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
Sonuçlar burada görünecek…

JSONPath Nedir?

JSONPath, JSON belgelerinden değer çıkarmak için kullanılan bir sorgu dilidir. Stefan Goessner tarafından 2007 yılında XML için XPath'e karşılık gelecek şekilde önerilen JSONPath, döngü yazmadan veya elle dolaşım kodu oluşturmadan bir kitap dizisindeki tüm yazar alanlarını seçmek için $.store.book[*].author gibi ifadeler yazmanızı sağlar. Dil, Şubat 2024'te IETF tarafından RFC 9535 olarak standartlaştırıldı.

Bir JSONPath ifadesi her zaman belgenin kökünü temsil eden $ ile başlar. Buradan itibaren seçiciler zinciri oluşturulur: nesne anahtarları için nokta gösterimi, dizi indisleri için köşeli parantez gösterimi, tüm alt öğeler için joker karakterler ve iç içe geçmiş her düzeyde arama yapmak için özyinelemeli iniş operatörü (..). [?(@.price < 10)] gibi filtre ifadeleri, değerlerine karşı değerlendirilen koşullara göre öğe seçmenizi sağlar.

JSONPath; Postman gibi API test araçlarında, Datadog ve Splunk gibi gözlemlenebilirlik platformlarında, Apache NiFi gibi iş akışı motorlarında ve JavaScript, Python, Go, Java ile C# genelindeki programlama kütüphanelerinde kullanılır. İfadelerinizi koda veya yapılandırma dosyalarına yerleştirmeden önce gerçek verilerle test etmek, JSON yapısının varsayımlarınızla eşleşmediği durumlardaki sessiz hataları önler.

Bu JSONPath Test Aracını Neden Kullanmalısınız?

JSONPath ifadelerini elle yazmak hataya açıktır. Eksik bir nokta, yanlış parantez türü veya hatalı filtre söz dizimi, hiçbir hata mesajı vermeden boş sonuç döndürebilir. Bu araç, ifadenizin neyle eşleştiğine dair anlık görsel geri bildirim sağlar.

Anlık Sonuçlar
JSON yapıştırın, ifade yazın ve eşleşen değerlerin gerçek zamanlı olarak güncellendiğini görün. Sorgunuzu kontrol etmek için bir betik çalıştırmanıza veya sayfayı yenilemenize gerek yok.
🔒
Gizlilik Öncelikli
Tüm değerlendirme tarayıcınızda çalışır. JSON veriniz hiçbir zaman makinenizden ayrılmaz; bu nedenle üretim API yanıtları veya kimlik bilgisi içeren yapılandırma dosyaları üzerinde güvenle test yapabilirsiniz.
📋
Sonuçları Doğrudan Kopyalayın
Eşleşen çıktıyı tek tıkla JSON olarak kopyalayın. Yeniden biçimlendirmeye gerek kalmadan test savlarına, belgelere veya API yanıt örneklerine yapıştırın.
🛠️
Kurulum Gerektirmez
Yüklenecek npm paketi veya oluşturulacak Python sanal ortamı yok. Sayfayı açın, verilerinizi yapıştırın ve sorgulamaya başlayın. Tarayıcısı olan her cihazda çalışır.

JSONPath Kullanım Senaryoları

Ön Uç Geliştirme
API yanıtlarından React state'ine veya Vue hesaplanmış özelliklerine bağlamadan önce ihtiyacınız olan tam iç içe geçmiş değerleri çıkarın. Yol ifadelerinizi önce gerçek API yükü üzerinde test edin.
Arka Uç API Testi
Postman ve REST-assured, yanıt gövdelerini doğrulamak için JSONPath kullanır. Savlarınızı test betiklerine kopyalamadan önce burada oluşturun ve doğrulayın; hata ayıklama döngülerini azaltın.
DevOps Yapılandırması
Kubernetes özel kaynak tanımları, AWS Step Functions ve Terraform veri kaynakları JSON çıktılarından değer çıkarmak için JSONPath ifadelerini kabul eder. Dağıtmadan önce yolunuzu doğrulayın.
QA Test Otomasyonu
Sözleşme testleri ve entegrasyon testleri için JSONPath tabanlı savlar yazın. JSON yapısında isteğe bağlı veya boş değer alabilen alanlar bulunduğunda ifadelerinizin beklenen değerlerle doğru eşleştiğini doğrulayın.
Veri Akışı Çıkarımı
Apache NiFi, Logstash ve özel ETL betikleri, yarı yapılandırılmış günlük verilerinden ve olay akışlarından alan çıkarmak için JSONPath kullanır. İfadeleri akış dağıtımından önce örnek yükler üzerinde test edin.
Öğrenme ve Deneme
JSONPath konusunda yeni olan öğrenciler ve geliştiriciler, joker karakterlerin, özyinelemeli inişin ve filtrelerin nasıl çalıştığını anlamak için yerel bir ortama gerek duymadan örnek JSON üzerinde farklı ifadeleri deneyebilir.

JSONPath Söz Dizimi Başvurusu

RFC 9535, standart JSONPath söz dizimini tanımlar. Aşağıdaki tablo, çoğu sorguda kullanacağınız operatörleri kapsar. Tüm ifadeler $ (kök düğüm) ile başlar ve belge yapısında gezinmek için bir veya daha fazla seçici zinciri oluşturur.

OperatörAçıklamaÖrnek
$Root element$.store
.keyChild property$.store.book
[n]Array index (zero-based)$.store.book[0]
[*]All elements in array/object$.store.book[*]
..Recursive descent$..author
[start:end]Array slice$.store.book[0:2]
[?()]Filter expression$.store.book[?(@.price<10)]
@Current node (inside filter)$.store.book[?(@.isbn)]

JSONPath ile jq ve XPath Karşılaştırması

JSONPath, jq ve XPath farklı biçimler ve kullanım senaryoları için aynı problemi (yapılandırılmış verileri sorgulama) çözer. JSONPath, JSON'u hedef alır ve çoğu dilde kütüphane olarak kullanılabilir. jq, kendi Turing-complete filtre diliyle birlikte gelen bağımsız bir CLI aracıdır. XPath, XML üzerinde çalışır ve W3C belirtim yığınının bir parçasıdır.

ÖzellikJSONPathjqXPath
Veri biçimiJSONJSONXML
İlk öğeye erişim$.store.book[0].store.book[0]/store/book[1]
Özyinelemeli arama$..price.. | .price?//price
Filtre ifadesi[?(@.price<10)]select(.price < 10)[price<10]
BelirtimRFC 9535stedolan.github.ioW3C XPath 3.1

Kod Örnekleri

Popüler dillerde ve araçlarda JSONPath ifadelerini nasıl değerlendireceğiniz. Her örnek karşılaştırma için aynı kitapçı JSON yapısını kullanır.

JavaScript (jsonpath-plus)
import { JSONPath } from 'jsonpath-plus';

const data = {
  store: {
    book: [
      { title: 'Moby Dick', price: 8.99 },
      { title: 'The Great Gatsby', price: 12.99 }
    ]
  }
};

// Get all book titles
JSONPath({ path: '$.store.book[*].title', json: data });
// → ['Moby Dick', 'The Great Gatsby']

// Recursive descent — find every price in the document
JSONPath({ path: '$..price', json: data });
// → [8.99, 12.99]

// Filter — books under $10
JSONPath({ path: '$.store.book[?(@.price < 10)]', json: data });
// → [{ title: 'Moby Dick', price: 8.99 }]
Python (jsonpath-ng)
from jsonpath_ng.ext import parse
import json

data = {
    "store": {
        "book": [
            {"title": "Moby Dick", "price": 8.99},
            {"title": "The Great Gatsby", "price": 12.99}
        ]
    }
}

# Get all book titles
expr = parse("$.store.book[*].title")
titles = [match.value for match in expr.find(data)]
# → ['Moby Dick', 'The Great Gatsby']

# Recursive descent — all prices
expr = parse("$..price")
prices = [match.value for match in expr.find(data)]
# → [8.99, 12.99]

# Filter — books under $10
expr = parse("$.store.book[?price < 10]")
cheap = [match.value for match in expr.find(data)]
# → [{"title": "Moby Dick", "price": 8.99}]
Go (ohler55/ojg)
package main

import (
    "fmt"
    "github.com/ohler55/ojg/jp"
    "github.com/ohler55/ojg/oj"
)

func main() {
    src := `{
        "store": {
            "book": [
                {"title": "Moby Dick", "price": 8.99},
                {"title": "The Great Gatsby", "price": 12.99}
            ]
        }
    }`

    obj, _ := oj.ParseString(src)

    // Get all book titles
    expr, _ := jp.ParseString("$.store.book[*].title")
    results := expr.Get(obj)
    fmt.Println(results)
    // → [Moby Dick The Great Gatsby]

    // Recursive descent — all prices
    expr2, _ := jp.ParseString("$..price")
    fmt.Println(expr2.Get(obj))
    // → [8.99 12.99]
}
CLI (jq alternative syntax)
# jq uses its own syntax, not JSONPath, but solves the same problem.
# Mapping common JSONPath patterns to jq:

# $.store.book[*].title → get all titles
echo '{"store":{"book":[{"title":"Moby Dick"},{"title":"Gatsby"}]}}' | \
  jq '.store.book[].title'
# → "Moby Dick"
# → "Gatsby"

# $..price → recursive descent for "price" keys
echo '{"a":{"price":1},"b":{"price":2}}' | \
  jq '.. | .price? // empty'
# → 1
# → 2

# Filter: books where price < 10
echo '{"store":{"book":[{"title":"A","price":8},{"title":"B","price":12}]}}' | \
  jq '.store.book[] | select(.price < 10)'
# → {"title":"A","price":8}

Sıkça Sorulan Sorular

JSONPath ile jq arasındaki fark nedir?
JSONPath, uygulamalara kütüphane olarak gömülmek üzere tasarlanmış bir sorgu dilidir. Yol ifadelerini kullanarak JSON belgesinden eşleşen değerleri döndürür. jq ise koşullar, işlevler ve dize enterpolasyonu dahil JSON dönüştürme için tam bir programlama diliyle birlikte gelen bağımsız bir komut satırı aracıdır. Kodda veya Postman gibi bir araçta gömülü bir sorguya ihtiyaç duyduğunuzda JSONPath kullanın. Geçici komut satırı veri dönüşümü için jq kullanın.
JSONPath resmi bir standart mı?
Evet. IETF, Şubat 2024'te RFC 9535 ("JSONPath: JSON için Sorgu İfadeleri") yayımladı. Bundan önce JSONPath, yalnızca Stefan Goessner'in 2007'deki resmi olmayan belirtimiyle mevcuttu; bu durum uygulamalar arasında tutarsızlıklara yol açıyordu. RFC 9535, birlikte çalışabilirlik için söz dizimi, anlambilim ve normalleştirme biçimini tanımlar.
JSONPath'te özyinelemeli iniş (..) nasıl çalışır?
Özyinelemeli iniş operatörü (..), JSON belgesinin her düzeyinde kendisini takip eden anahtarı arar. Örneğin $..price, ne kadar derin iç içe geçmiş olursa olsun "price" anahtarıyla ilişkili tüm değerleri döndürür. Eşleşen düğümleri toplayan derinlik öncelikli bir dolaşıma eşdeğerdir. Büyük belgelerde özyinelemeli inişin çok sayıda sonuç döndürebileceğini ve doğrudan yoldan daha yavaş olabileceğini unutmayın.
JSONPath, JSON verilerini değiştirebilir mi?
Hayır. JSONPath, yalnızca okuma amaçlı bir sorgu dilidir. Değerleri seçer ve döndürür; ancak düğüm ekleyemez, güncelleyemez veya silemez. Bir JSONPath ifadesine göre JSON'u değiştirmek için sorgu yaptıktan sonra programlama dilinizin JSON işleme işlevlerini kullanmanız gerekir. Python'daki jsonpath-ng gibi bazı kütüphaneler eşleşme nesnelerinde bir set() yöntemi sağlar; ancak bu, JSONPath belirtiminin değil, kütüphanenin bir uzantısıdır.
JSONPath filtre ifadelerinde @ sembolü ne anlama gelir?
@ sembolü, filtre ifadesinde değerlendirilen geçerli düğümü ifade eder. $.store.book[?(@.price < 10)] ifadesinde filtre, book dizisinin her öğesi üzerinde yineleme yapar ve @ her seferinde o kitap nesnesini temsil eder. @.price, geçerli kitabın price alanına erişir. @ olmadan filtre, hangi düğümün özelliklerini kontrol edeceğini bilemez.
JSONPath'te özel karakter veya boşluk içeren anahtarları nasıl ele alırım?
Tırnaklı köşeli parantez gösterimini kullanın: $['store']['book title']. Köşeli parantez gösterimi; nokta, boşluk veya Unicode karakter içerenler dahil tüm anahtarlar için çalışır. Nokta gösterimi ($.store.key) yalnızca geçerli tanımlayıcı olan anahtarlar (harfler, rakamlar, alt çizgiler) için çalışır. RFC 9535, uygulamaların hem tek tırnaklı hem de çift tırnaklı köşeli parantez gösterimini desteklemesini zorunlu kılar.
JSONPath ifadem neden boş sonuç döndürüyor?
En yaygın nedenler şunlardır: anahtar adında yazım hatası (JSONPath büyük/küçük harfe duyarlıdır), özel karakter içeren bir anahtar için nokta gösterimi kullanma, başlangıçta $ kök sembolünün eksik olması veya tek nesne olan bir değerin dizi olduğunun varsayılması. JSON'unuzu bir test aracına yapıştırın ve daha fazla seçici eklemeden önce yolunuzun her segmentinin doğru çözümlendiğini doğrulamak için önce $.store gibi daha basit alt ifadeleri deneyin.