Apa itu JSONPath?
JSONPath adalah bahasa kueri untuk dokumen JSON, setara dengan XPath untuk XML. Stefan Goessner mengusulkannya pada tahun 2007 sebagai cara singkat dan mudah dibaca untuk menunjuk node di dalam pohon JSON tanpa menulis parser. Ekspresi dimulai dengan selektor root $ dan merangkai pengakses properti, subskrip array, wildcard, penurunan rekursif, dan kondisi filter hingga memilih node yang Anda inginkan. Pada tahun 2024, IETF menerbitkan RFC 9535 untuk menstandardisasi sintaks yang sebelumnya terfragmentasi di berbagai implementasi; penguji ini berjalan pada jsonpath-plus, implementasi JavaScript yang banyak digunakan yang mencakup draf Goessner, sebagian besar RFC 9535, dan beberapa operator ekstensi tambahan.
Cara kerja JSONPath
Ekspresi JSONPath dibaca dari kiri ke kanan dan menelusuri dokumen JSON satu langkah setiap kali. Setiap langkah mengambil kumpulan node yang lolos dari langkah sebelumnya dan mempersempitnya lebih lanjut. Pipeline evaluasi lengkap:
- Jangkar dengan selektor root
$. Setiap ekspresi dimulai di sini, menunjuk pada nilai tingkat teratas, baik itu objek maupun array. Nama properti tanpa$di awal bukan JSONPath yang valid. - Masuk ke anggota anak dengan notasi titik (
$.store.book) atau notasi kurung ($['store']['book']). Notasi kurung diperlukan ketika kunci mengandung spasi, tanda hubung, atau karakter apa pun yang bukan identifier yang valid. - Cari setiap level sekaligus dengan operator penurunan rekursif
... Ekspresi$..authormengumpulkan setiap nilaiauthordi mana saja dalam pohon, terlepas dari kedalaman. Ini adalah operator yang tidak dimiliki JMESPath. - Pilih elemen array berdasarkan indeks (
[0],[-1]untuk item terakhir di jsonpath-plus), potong dengan notasi[start:end]([0:3]mengembalikan tiga elemen pertama), atau ambil setiap elemen dengan wildcard[*]. - Filter elemen dengan predikat di dalam
[?(...)]. Di dalam predikat,@mengacu pada elemen saat ini, sehingga[?(@.price<10)]hanya menyimpan item yang memiliki fieldpricekurang dari 10. Filter tersusun dengan sisa jalur, sehingga Anda bisa memfilter kemudian turun, atau turun kemudian memfilter. - Pilih format keluaran. Nilai mengembalikan data yang cocok itu sendiri. Jalur mengembalikan JSONPath setiap kecocokan sehingga Anda dapat melihat apa yang diselesaikan oleh mesin. Pointer mengembalikan RFC 6901 JSON Pointer yang setara untuk setiap kecocokan, berguna saat konsumen hilir adalah JSON Patch atau validator JSON Schema.
Mengapa menggunakan penguji JSONPath ini?
- JSON Anda tidak pernah meninggalkan peramban. Kueri berjalan di dalam halaman, sehingga fixture produksi, PII pelanggan, dan respons API pra-rilis tetap di mesin Anda.
- Mesinnya adalah
jsonpath-plus9.x, pustaka yang sama yang mendukung banyak rangkaian pengujian produksi dan pernyataan CI. Hasil yang Anda lihat di sini cocok dengan hasil yang akan dilihat pipeline build Anda. - Tiga mode keluaran mencakup konsumen hilir yang umum: Nilai mentah untuk salin-tempel, Jalur untuk men-debug resolusi mesin, dan RFC 6901 Pointer untuk alur kerja JSON Patch dan JSON Schema.
- Ekspresi filter berjalan dengan
preventEval: true, sehingga kueri yang ditempel tidak dapat mengeksekusi JavaScript sembarang terhadap halaman host. Hal itu penting ketika ekspresi berasal dari pesan Slack, tiket Jira, atau clipboard rekan kerja.
Aplikasi umum JSONPath
JSONPath muncul di mana saja kode harus mengambil field dari payload JSON tanpa menulis penurunan rekursif secara manual:
- Pengujian Postman: tab Tests di Postman memaparkan
pm.response.json()beserta akses gaya JSONPath untuk pernyataan. Tim menulis ekspresi tunggal seperti$.data.user.emailuntuk mengambil field dari respons dan menegaskannya di CI. - Load test k6: skrip k6 memanggil
jsonpath()di dalam blokcheck()untuk mengekstrak nilai dari body respons dan menegaskan ambang SLA. Ekspresi yang sama yang membuktikan kontrak di Postman bisa memblokir load test di k6. - DSL JSON untuk transformasi data: AWS Step Functions mengevaluasi JSONPath di dalam
InputPath,ResultPath, danParametersuntuk membentuk ulang payload event antar state. Argo Workflows menggunakan JSONPath diwithParamuntuk mem-fan-out tugas melalui array.kubectl -o jsonpathKubernetes menggunakan sintaks yang sama untuk mengekstrak field dari objek cluster.
Contoh yang dikerjakan
Fixture Goessner kanonik adalah dokumen toko buku dengan empat buku, masing-masing membawa category, author, title, dan price. Terhadap fixture tersebut, ekspresi $.store.book[?(@.price<10)].title berjalan dalam tiga langkah. Pertama, $.store.book memecahkan ke array semua empat buku. Berikutnya, filter [?(@.price<10)] hanya menyimpan satu buku dengan harga di bawah 10 (entri pada 8,95). Terakhir, .title mengekstrak judul buku tersebut. Hasilnya adalah ["Sayings of the Century"]. Beralih ke Jalur mengembalikan ["$['store']['book'][0]['title']"], dan Pointer mengembalikan ["/store/book/0/title"].
Buat prototipe ekspresi Anda di sini, lalu masukkan langsung ke Postman, k6, kubectl, atau mesin state Step Functions. Tempel, kueri, salin. Tidak ada yang melewati jaringan.
Apa itu JSONPath?
JSONPath adalah bahasa kueri untuk dokumen JSON, analog dengan XPath untuk XML. Diusulkan oleh Stefan Goessner pada tahun 2007 dan distandardisasi oleh IETF sebagai RFC 9535 pada tahun 2024, sintaks ekspresi ringkasnya dimulai dengan $ (root dokumen) dan mendukung notasi titik, subskrip array, wildcard, potongan, penurunan rekursif (..), dan ekspresi filter ([?(...)]) untuk memilih node di dalam pohon JSON.
Apa perbedaan JSONPath dengan JMESPath atau jq?
Ketiganya mengkueri JSON, tetapi tata bahasa dan tujuannya berbeda. JMESPath adalah standar AWS CLI/SDK: lebih ketat dari JSONPath, tanpa penurunan rekursif, dibangun untuk proyeksi tanpa efek samping yang dapat diprediksi. jq adalah bahasa skrip Turing-complete yang tidak hanya mengkueri JSON tetapi juga mentransformasi, mereduksi, dan mengalirkannya. JSONPath berada di antara keduanya: lebih ekspresif dari JMESPath berkat penurunan rekursif dan filter, lebih ringan dari jq, dan sintaks yang paling banyak didukung dalam alat pengujian serba guna (Postman, Playwright, REST Assured, kubectl, Step Functions). Penguji ini mengimplementasikan JSONPath.
Dialek apa yang digunakan penguji ini?
Penguji ini menjalankan jsonpath-plus 9.x. Pustaka tersebut mengimplementasikan spesifikasi Goessner 2007, mencakup sebagian besar RFC 9535, dan menambahkan operator ekstensi seperti pemeriksaan tipe (@.string(), @.number(), @.boolean()) dan navigasi parent (^). Flag preventEval: true selalu disetel, sehingga predikat filter berjalan melalui interpreter yang aman daripada built-in JavaScript eval(). Kueri yang ditempel tidak dapat mengeksekusi kode sembarang terhadap halaman ini.
Bisakah saya menyalin nilai yang cocok secara individual?
Ya. Tombol Salin ke papan klip menyalin blok hasil lengkap sebagai array JSON. Untuk mengambil satu nilai, alihkan mode keluaran ke Nilai, lalu pilih baris yang Anda inginkan di textarea hasil dan gunakan pintasan salin normal peramban Anda (Ctrl/Cmd + C). Keluarannya adalah teks JSON biasa, sehingga dapat ditempel dengan bersih ke editor kode, terminal, pengujian Postman, atau pesan Slack.