ToolDeck

JSONPath Tester

Uji ekspresi JSONPath terhadap data JSON dan lihat hasil yang cocok

Coba contoh

Input JSON

Hasil

Berjalan lokal · Aman untuk menempel rahasia
Hasil akan muncul di sini…

Apa itu JSONPath?

JSONPath adalah bahasa kueri untuk mengekstrak nilai dari dokumen JSON. Awalnya diusulkan oleh Stefan Goessner pada tahun 2007 sebagai padanan XPath untuk XML, JSONPath memungkinkan Anda menulis ekspresi seperti $.store.book[*].author untuk memilih semua field author di dalam array book tanpa menulis loop atau kode traversal manual. Bahasa ini distandarisasi pada Februari 2024 sebagai RFC 9535 yang diterbitkan oleh IETF.

Ekspresi JSONPath selalu dimulai dengan $ yang mewakili akar dokumen. Dari sana Anda merangkai selektor: notasi titik untuk kunci objek, notasi kurung untuk indeks array, wildcard untuk semua anak, dan operator rekursif (..) untuk menelusuri setiap level nesting. Ekspresi filter seperti [?(@.price < 10)] memungkinkan Anda memilih elemen berdasarkan kondisi yang dievaluasi terhadap nilainya.

JSONPath digunakan dalam alat pengujian API seperti Postman, platform observabilitas seperti Datadog dan Splunk, mesin workflow seperti Apache NiFi, serta pustaka pemrograman di JavaScript, Python, Go, Java, dan C#. Menguji ekspresi Anda terhadap data nyata sebelum menyematkannya dalam kode atau file konfigurasi mencegah kegagalan diam-diam ketika struktur JSON tidak sesuai dengan asumsi Anda.

Mengapa Menggunakan JSONPath Tester Ini?

Menulis ekspresi JSONPath secara manual rentan terhadap kesalahan. Titik yang hilang, tipe kurung yang salah, atau sintaks filter yang keliru dapat mengembalikan hasil kosong tanpa pesan error. Alat ini memberikan umpan balik visual langsung tentang apa yang dicocokkan ekspresi Anda.

Hasil Instan
Tempel JSON, ketik ekspresi, dan lihat nilai yang cocok diperbarui secara real time. Tidak perlu menjalankan skrip atau memuat ulang halaman untuk memeriksa kueri Anda.
🔒
Mengutamakan Privasi
Semua evaluasi berjalan di browser Anda. Data JSON Anda tidak pernah meninggalkan perangkat Anda, sehingga Anda dapat dengan aman menguji ekspresi terhadap respons API produksi atau file konfigurasi yang mengandung kredensial.
📋
Salin Hasil Langsung
Salin output yang cocok sebagai JSON dengan satu klik. Tempelkan ke dalam pernyataan pengujian, dokumentasi, atau contoh respons API tanpa perlu memformat ulang.
🛠️
Tanpa Pengaturan
Tidak ada paket npm yang perlu diinstal, tidak ada virtualenv Python yang perlu dibuat. Buka halaman, tempel data Anda, dan mulai membuat kueri. Berfungsi di perangkat apa pun yang memiliki browser.

Kasus Penggunaan JSONPath

Pengembangan Frontend
Ekstrak nilai tersarang yang Anda butuhkan dari respons API sebelum menghubungkannya ke state React atau computed properties Vue. Uji ekspresi path Anda terhadap payload API nyata terlebih dahulu.
Pengujian API Backend
Postman dan REST-assured menggunakan JSONPath untuk menegaskan body respons. Buat dan verifikasi ekspresi pernyataan Anda di sini sebelum menyalinnya ke skrip pengujian, mengurangi siklus debug.
Konfigurasi DevOps
Custom resource definition Kubernetes, AWS Step Functions, dan sumber data Terraform menerima ekspresi JSONPath untuk mengekstrak nilai dari output JSON. Validasi path Anda sebelum melakukan deployment.
Otomasi Pengujian QA
Tulis pernyataan berbasis JSONPath untuk contract test dan integration test. Verifikasi bahwa ekspresi Anda mencocokkan nilai yang diharapkan dengan benar ketika struktur JSON memiliki field opsional atau nullable.
Ekstraksi Pipeline Data
Apache NiFi, Logstash, dan skrip ETL kustom menggunakan JSONPath untuk mengekstrak field dari data log semi-terstruktur dan event stream. Uji ekspresi terhadap payload sampel sebelum deployment pipeline.
Belajar dan Eksperimentasi
Mahasiswa dan developer yang baru mengenal JSONPath dapat mencoba berbagai ekspresi terhadap JSON sampel untuk memahami cara kerja wildcard, recursive descent, dan filter tanpa lingkungan lokal.

Referensi Sintaks JSONPath

RFC 9535 mendefinisikan sintaks JSONPath standar. Tabel di bawah mencakup operator yang akan Anda gunakan dalam sebagian besar kueri. Semua ekspresi dimulai dengan $ (node akar) dan merangkai satu atau lebih selektor untuk menavigasi struktur dokumen.

OperatorDeskripsiContoh
$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 vs jq vs XPath

JSONPath, jq, dan XPath memecahkan masalah yang sama (membuat kueri data terstruktur) untuk format dan kasus penggunaan yang berbeda. JSONPath menargetkan JSON dan tersedia sebagai pustaka di sebagian besar bahasa. jq adalah alat CLI mandiri dengan bahasa filter Turing-complete-nya sendiri. XPath beroperasi pada XML dan merupakan bagian dari tumpukan spesifikasi W3C.

FiturJSONPathjqXPath
Format dataJSONJSONXML
Akses elemen pertama$.store.book[0].store.book[0]/store/book[1]
Pencarian rekursif$..price.. | .price?//price
Ekspresi filter[?(@.price<10)]select(.price < 10)[price<10]
SpesifikasiRFC 9535stedolan.github.ioW3C XPath 3.1

Contoh Kode

Cara mengevaluasi ekspresi JSONPath dalam bahasa dan alat populer. Setiap contoh menggunakan struktur JSON toko buku yang sama untuk perbandingan.

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}

Pertanyaan yang Sering Diajukan

Apa perbedaan antara JSONPath dan jq?
JSONPath adalah bahasa kueri yang dirancang untuk disematkan dalam aplikasi sebagai pustaka. Ia mengembalikan nilai yang cocok dari dokumen JSON menggunakan ekspresi path. jq adalah alat command-line mandiri dengan bahasa pemrograman lengkap untuk mentransformasi JSON, termasuk kondisional, fungsi, dan interpolasi string. Gunakan JSONPath saat Anda membutuhkan kueri yang disematkan dalam kode atau alat seperti Postman. Gunakan jq untuk transformasi data command-line secara ad-hoc.
Apakah JSONPath merupakan standar resmi?
Ya. IETF menerbitkan RFC 9535 ("JSONPath: Query Expressions for JSON") pada Februari 2024. Sebelum itu, JSONPath hanya ada sebagai spesifikasi informal oleh Stefan Goessner dari tahun 2007, yang menyebabkan inkonsistensi antar implementasi. RFC 9535 mendefinisikan sintaks, semantik, dan format normalisasi untuk interoperabilitas.
Bagaimana cara kerja recursive descent (..) dalam JSONPath?
Operator recursive descent (..) menelusuri setiap level dokumen JSON untuk mencari kunci yang mengikutinya. Misalnya, $..price mengembalikan semua nilai yang terkait dengan kunci "price" terlepas dari seberapa dalam sarangnya. Ini setara dengan traversal depth-first yang mengumpulkan node yang cocok. Perlu diketahui bahwa pada dokumen besar, recursive descent dapat mengembalikan banyak hasil dan mungkin lebih lambat dari path langsung.
Bisakah JSONPath mengubah data JSON?
Tidak. JSONPath adalah bahasa kueri read-only. Ia memilih dan mengembalikan nilai tetapi tidak dapat menyisipkan, memperbarui, atau menghapus node. Untuk mengubah JSON berdasarkan ekspresi JSONPath, Anda perlu menggunakan fungsi manipulasi JSON bahasa pemrograman Anda setelah membuat kueri. Beberapa pustaka seperti jsonpath-ng di Python menyediakan metode set() pada objek match, tetapi ini adalah ekstensi pustaka, bukan bagian dari spesifikasi JSONPath.
Apa arti simbol @ dalam ekspresi filter JSONPath?
Simbol @ merujuk pada node saat ini yang sedang dievaluasi dalam ekspresi filter. Dalam $.store.book[?(@.price < 10)], filter melakukan iterasi atas setiap elemen array book, dan @ mewakili setiap objek book secara bergantian. @.price mengakses field price dari book saat ini. Tanpa @, filter tidak akan mengetahui properti node mana yang harus diperiksa.
Bagaimana cara menangani kunci dengan karakter khusus atau spasi dalam JSONPath?
Gunakan notasi kurung dengan tanda kutip: $['store']['book title']. Notasi kurung bekerja untuk kunci apa pun, termasuk yang mengandung titik, spasi, atau karakter Unicode. Notasi titik ($.store.key) hanya bekerja untuk kunci yang merupakan identifier valid (huruf, angka, garis bawah). RFC 9535 mengharuskan implementasi mendukung notasi kurung dengan tanda kutip tunggal maupun ganda.
Mengapa ekspresi JSONPath saya mengembalikan hasil kosong?
Penyebab paling umum adalah: kesalahan ketik pada nama kunci (JSONPath peka huruf besar-kecil), menggunakan notasi titik untuk kunci yang mengandung karakter khusus, tidak menyertakan simbol akar $ di awal, atau mengasumsikan suatu nilai adalah array padahal berupa objek tunggal. Tempel JSON Anda ke alat tester dan coba sub-ekspresi yang lebih sederhana terlebih dahulu (seperti $.store) untuk memverifikasi setiap segmen path Anda terpecahkan dengan benar sebelum menambahkan lebih banyak selektor.