Penguji JSONPath Gratis — Evaluasi Kueri Online
Uji ekspresi JSONPath terhadap JSON apa pun secara instan. Mesin standar RFC 9535 plus mode Klasik Goessner, tampilan Values / Paths / Both, path ternormalisasi, tanpa eval. 100% privat di browser, tanpa unggah.
Apa Itu Penguji JSONPath?
Penguji JSONPath adalah alat yang memungkinkan Anda menulis ekspresi JSONPath, menempel dokumen JSON, dan melihat persis node mana yang dipilih ekspresi tersebut — baik nilai yang cocok maupun lokasinya yang presisi — tanpa menulis kode atau menjalankan skrip. Bagi pengembang, ia memperpendek putaran dari menit menjadi milidetik: ubah path, lihat hasil berubah, dan kirimkan kueri dengan percaya diri.
JSONPath adalah bahasa kueri untuk JSON, analog JSON dari XPath untuk XML. Sebuah ekspresi dibangun dari alfabet kecil selektor. $ adalah akar dokumen. Sebuah titik atau tanda kurung melangkah ke anak: $.store atau $['store']. Titik ganda .. adalah penurunan rekursif — ia mencari setiap tingkat pohon. Wildcard * memilih semua elemen atau anggota. Tanda kurung membawa indeks larik ([0]), irisan ([start:end:step]), gabungan ([a,b]), dan ekspresi filter ([?(@.price < 10)], di mana @ adalah elemen yang sedang diuji). Dengan potongan-potongan itu Anda dapat menarik satu bidang dari respons API yang tersarang dalam, menegaskan nilai dalam pengujian, menggerakkan transformasi data dalam sistem seperti Kubernetes, AWS Step Functions, dan Azure Logic Apps, atau mengekstrak data terstruktur dari JSON tidak beraturan — semua tanpa kode penelusuran imperatif. JSONPath juga terkenal tidak konsisten antar implementasi, yang justru merupakan masalah yang dimunculkan oleh penguji yang baik sebelum mencapai produksi.
Penguji ini membawa dua mesin. Default adalah mesin RFC 9535: RFC 9535 adalah spesifikasi formal JSONPath dari IETF pada Februari 2024, pertama kalinya bahasa ini distandarkan secara presisi setelah lima belas tahun implementasi yang berbeda-beda. Ia mendefinisikan tata bahasa yang eksak, konsep path ternormalisasi untuk hasil, dan lima fungsi standar — length(), count(), match(), search(), value(). Mesin RFC 9535 kami adalah implementasi tanpa dependensi yang tidak menggunakan eval, sehingga ia mengurai dan menafsirkan ekspresi dengan tata bahasanya sendiri alih-alih mengompilasinya ke JavaScript. Mesin kedua adalah Klasik (Goessner), dialek de facto 2007 yang diimplementasikan sebagian besar alat dan pustaka online lebih lama; beralihlah ke sana untuk mereproduksi hasil dari alat seperti jsonpath.com atau menjalankan ekspresi yang Anda salin dari kode lawas. Kedua dialek sepakat pada path umum tetapi berbeda dalam kasus tepi — spasi dan tanda kutip filter, urutan gabungan, bagaimana anggota yang hilang dibandingkan, dan fungsi mana yang ada — sehingga dapat beralih di antaranya di satu tempat adalah cara tercepat untuk mendiagnosis mengapa sebuah ekspresi berperilaku berbeda dari yang Anda harapkan.
Apa yang dimunculkan penguji di luar nilai mentah: hasil dari kueri JSONPath adalah nodelist, dan alat ini dapat menampilkannya dalam tiga cara. Tampilan Values merender node yang cocok sebagai larik JSON, persis apa yang akan Anda konsumsi dalam kode. Tampilan Paths merender path ternormalisasi setiap kecocokan — lokasi kanonis berkurung-kutip seperti $['store']['book'][0]['title'] yang secara unik mengidentifikasi di mana dalam dokumen nilai itu berada, terlepas dari bagaimana ekspresi ditulis. Dua ekspresi yang memilih node yang sama menghasilkan path ternormalisasi yang sama, yang membuat tampilan Paths sangat berharga untuk debugging. Tampilan Both menunjukkan nilai dan path berdampingan. Baris statistik melaporkan berapa banyak node yang cocok.
Keamanan adalah perhatian kelas-satu di sini. Banyak evaluator JSONPath online berjalan di server, atau menyematkan pustaka yang mengevaluasi predikat filter dengan JavaScript eval — desain yang menghasilkan kerentanan eksekusi kode jarak jauh yang dilacak sebagai CVE-2024-21534 dan CVE-2025-1302 dalam paket JSONPath yang banyak digunakan. Alat ini tidak menggunakan eval sama sekali. Mesin RFC 9535 tidak memiliki jalur eval, dan mesin Klasik dibangun di atas rilis jsonpath-plus yang ditambal dan disematkan dengan eval dinonaktifkan secara eksplisit. Itu menutup kelas bug RCE dan memungkinkan alat berjalan di bawah Content-Security-Policy ketat yang melarang unsafe-eval. Setiap evaluasi bersifat lokal: JSON dan ekspresi Anda tidak pernah meninggalkan halaman, tidak pernah dicatat, dan tidak pernah disimpan ke disk — hanya preferensi mesin dan tampilan Anda yang bertahan ke localStorage. Itu membuat alat aman untuk payload API berpemilik, log yang disunting, konfigurasi internal, dan data apa pun dengan skema yang tidak akan Anda tempel ke layanan berbasis server.
Jika pengolahan JSON adalah tugas Anda, pasangkan ini dengan alat JSON lain di situs: format dan cetak rapi masukan Anda dengan JSON Formatter, bandingkan dua dokumen dengan JSON Diff, periksa payload terhadap skema dengan JSON Schema Validator, atau ubah respons sampel menjadi antarmuka bertipe dengan JSON to TypeScript.
// 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 Fitur Utama
Mesin Standar RFC 9535 (Tanpa Eval)
Mesin default mengimplementasikan RFC 9535, spesifikasi JSONPath formal IETF 2024 — tata bahasa eksak, path ternormalisasi, dan lima fungsi standar. Ia tanpa dependensi dan tidak menggunakan eval, sehingga mengurai dan menafsirkan ekspresi dengan tata bahasanya sendiri alih-alih mengompilasinya ke JavaScript. Ia berjalan di bawah Content-Security-Policy yang ketat.
Mode Kompatibilitas Klasik (Goessner)
Satu toggle beralih ke mesin yang kompatibel dengan Goessner (dibangun di atas jsonpath-plus, dikonstruksi dengan eval dinonaktifkan) sehingga ekspresi yang disalin dari alat lebih lama seperti jsonpath.com berperilaku seperti yang Anda lihat di sana. Beralihlah antara RFC 9535 dan Klasik untuk membandingkan hasil dan mendiagnosis mengapa sebuah path cocok berbeda lintas dialek.
Tiga Tampilan Hasil: Values, Paths, Both
Values merender node yang cocok sebagai larik JSON, persis apa yang Anda konsumsi dalam kode. Paths merender path ternormalisasi setiap kecocokan seperti $['store']['book'][0]['title']. Both menunjukkan keduanya berdampingan sehingga Anda dapat memetakan setiap nilai ke lokasi presisnya. Tampilan aktif bertahan lintas sesi.
Path Ternormalisasi untuk Setiap Kecocokan
Setiap hasil membawa path ternormalisasi kanonis berkurung-kutipnya — cara RFC 9535 mengidentifikasi lokasi node secara unik terlepas dari bagaimana ekspresi ditulis. Dua ekspresi yang mengenai node yang sama menghasilkan path ternormalisasi yang sama, yang membuat debugging kueri ambigu menjadi mudah.
Dukungan Selektor Penuh
Akar $, elemen saat ini @, anak .name, penurunan rekursif ..name, wildcard [*], indeks larik [0], irisan [start:end:step], gabungan [a,b], dan ekspresi filter [?()] dengan operator perbandingan dan logika. Lembar contekan bawaan mendokumentasikan setiap selektor sehingga Anda tidak pernah harus meninggalkan halaman untuk mencarinya.
Ekstensi Fungsi RFC 9535
Panggil length(), count(), match(), search(), dan value() di dalam ekspresi — hitung elemen larik, uji string terhadap pola I-Regexp, atau saring berdasarkan ukuran daftar tersarang. Fungsi standar ini tersedia di mesin default; alat memberi tahu Anda untuk beralih mesin jika Anda memanggilnya dalam mode Klasik.
Format, Unggah & Contoh
Format JSON mencetak rapi masukan Anda agar strukturnya terbaca sebelum Anda mengkueri. Unggah membaca berkas .json atau .txt sepenuhnya di browser — ia tidak pernah dikirim ke mana pun. Dropdown Examples memuat ekspresi awal yang dikenal-baik terhadap data sampel sehingga Anda melihat mesin bekerja sebelum mengadaptasi path.
Berbagi Tautan Permanen (Tanpa Unggah)
Salin tautan mengodekan JSON, ekspresi, mesin, dan tampilan ke dalam hash URL. Browser tidak pernah mengirimkan fragmen URL dalam permintaan, sehingga tautan yang dibagikan mereproduksi seluruh keadaan Anda di mesin penerima tanpa menyentuh server go-tools.org. Mandiri dan ramah-audit untuk debugging kolaboratif.
100% Privat, Hanya Browser
JSON dan ekspresi Anda tidak pernah meninggalkan perangkat Anda. Tanpa permintaan jaringan, tanpa pencatatan, tanpa analitik atas apa yang Anda ketik — verifikasi di DevTools → Network. Hanya preferensi mesin dan tampilan yang bertahan ke localStorage. Aman untuk payload berpemilik, log yang disunting, dan data apa pun yang tidak akan Anda tempel ke jsonpath.com.
Contoh yang Dikerjakan
Pilih setiap judul buku dari dokumen toko buku
$.store.book[*].title
["Sayings of the Century", "Sword of Honour", "Moby Dick", "The Lord of the Rings"]
Tempel JSON toko buku Goessner klasik, ketik ekspresinya, dan tampilan Values mengembalikan larik JSON berisi keempat judul. Beralih ke Paths untuk melihat setiap hasil sebagai path ternormalisasi seperti $['store']['book'][0]['title']. Wildcard [*] mengiterasi setiap elemen larik book; .title memproyeksikan satu anggota dari masing-masing.
Saring buku yang lebih murah dari 10 dengan ekspresi filter
$.store.book[?(@.price < 10)].title
["Sayings of the Century", "Moby Dick"]
Selektor filter [?()] hanya menyimpan elemen larik yang predikatnya bernilai benar; @ adalah elemen saat ini. Terhadap data toko buku (harga 8.95, 12.99, 8.99, 22.99) dua buku memenuhi syarat. Kedua mesin menerima bentuk ini, tetapi perhatikan bahwa Klasik (Goessner) menulis filter yang sama sebagai [?(@.price<10)] — beralihlah mesin jika Anda menyalin ekspresi dari alat yang lebih lama.
Telusuri seluruh pohon dengan penurunan rekursif
$..author
["Nigel Rees", "Evelyn Waugh", "Herman Melville", "J. R. R. Tolkien"]
Operator .. turun ke setiap tingkat dokumen dan mengumpulkan setiap anggota author di mana pun ia muncul, terlepas dari kedalaman penyarangan. Penurunan rekursif adalah cara tercepat untuk menarik satu bidang dari struktur yang tersarang dalam atau tidak beraturan tanpa mengeja path lengkap.
Iris larik dengan [start:end:step]
$.store.book[0:2].title
["Sayings of the Century", "Sword of Honour"]
Irisan larik mengikuti konvensi setengah-terbuka [start:end] yang sama seperti Python dan JavaScript: indeks 0 hingga tetapi tidak termasuk indeks 2 mengembalikan dua buku pertama. Tambahkan bidang ketiga untuk langkah — $.store.book[::2] mengambil setiap elemen kedua. Batas akhir bersifat eksklusif, jebakan off-by-one umum yang dibuat jelas oleh tampilan Paths.
Saring berdasarkan panjang judul dengan fungsi length() RFC 9535
$.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() adalah salah satu dari lima fungsi standar RFC 9535, dan ia hanya valid di dalam ekspresi filter [?...] — tidak pernah sebagai segmen path mandiri seperti $.store.book.length(), yang ditolak oleh tata bahasa RFC 9535 (bentuk segmen itu adalah ekstensi jsonpath-plus, bukan JSONPath standar). Di sini filter menyimpan setiap buku yang judulnya memiliki lebih dari 15 karakter; terhadap data toko buku, judul yang lebih panjang dari 15 karakter dipilih (misalnya "Sayings of the Century" dan "The Lord of the Rings"), sementara yang lebih pendek seperti "Moby Dick" dan "Sword of Honour" dikecualikan. count(), match(), search(), dan value() juga digunakan di dalam filter. Fungsi-fungsi ini adalah fitur RFC 9535 — beralihlah ke mesin standar (default) untuk menggunakannya; mode Klasik (Goessner) tidak mengimplementasikannya.
Pilih gabungan dari dua anggota bernama
$.store.book[0]['title','author']
["Sayings of the Century", "Nigel Rees"]
Selektor gabungan [a,b] mengumpulkan beberapa anak dalam satu ekspresi. Di sini ia menarik baik title maupun author dari buku pertama. Gabungan juga bekerja dengan indeks larik — [0,2] mengambil elemen pertama dan ketiga. Tampilan Both memasangkan setiap nilai dengan path ternormalisasinya sehingga Anda dapat melihat persis anggota mana yang menghasilkan hasil mana.
Cara Menggunakan Penguji JSONPath
- 1
Tempel atau unggah JSON Anda
Jatuhkan JSON ke kotak masukan, tempelkan, atau klik Unggah untuk memuat berkas .json / .txt dari disk. Format JSON mengindentasi ulang dokumen. JSON tidak valid ditandai sebaris dengan pesan parser sebelum Anda mengkueri.
- 2
Pilih sebuah mesin
RFC 9535 (standar IETF 2024, tanpa eval) adalah default. Beralih ke Klasik (Goessner) saat Anda menjalankan ekspresi yang disalin dari alat lebih lama seperti jsonpath.com agar hasilnya cocok dengan apa yang Anda lihat di sana.
- 3
Ketik ekspresi JSONPath Anda
Awalan $ sudah ditampilkan untuk Anda. Mulailah dengan path anak seperti .store.book[*].title, indeks seperti [0], penurunan rekursif seperti ..author, atau filter seperti [?(@.price < 10)]. Hasil diperbarui secara langsung saat Anda mengetik.
- 4
Beralih tampilan hasil
Values menunjukkan larik JSON dari nilai yang cocok. Paths menunjukkan path ternormalisasi setiap kecocokan seperti $['store']['book'][0]['title']. Both menunjukkan keduanya berdampingan sehingga Anda dapat memetakan setiap nilai ke lokasi persisnya dalam dokumen.
- 5
Salin hasil atau bagikan tautan permanen
Salin hasil menempatkan keluaran di papan klip Anda. Salin tautan mengodekan JSON, ekspresi, mesin, dan tampilan ke dalam hash URL (tanpa unggah) sehingga kolega dapat mereproduksi kueri persis secara lokal di mesin mereka sendiri.
Kesalahan JSONPath Umum
Lupa akar $ di awal
Setiap ekspresi JSONPath dimulai pada akar, ditulis sebagai $. Menghilangkannya (atau menulis path seolah-olah $ tersirat) membuat sebagian besar mesin menolak ekspresi. Penguji menampilkan $ untuk Anda, jadi mulailah masukan Anda dengan selektor berikutnya — titik, tanda kurung, atau penurunan rekursif.
store.book[*].title → invalid (no root)
$.store.book[*].title → selects every title
Off-by-one irisan — mengharapkan indeks akhir disertakan
Irisan bersifat setengah-terbuka: [start:end] berjalan hingga tetapi tidak termasuk end. [0:2] mengembalikan dua elemen (indeks 0 dan 1), bukan tiga. Untuk menyertakan elemen terakhir berdasarkan indeks, gunakan [start:] atau dorong batas akhir satu melewatinya.
$.store.book[0:2] → first TWO books, not three
$.store.book[0:3] → first three books (indices 0,1,2)
Menggunakan ekspresi Klasik di mesin RFC 9535 (atau sebaliknya)
Ekspresi yang disalin dari jsonpath.com atau jsonpath-plus dapat diurai atau dicocokkan berbeda di bawah RFC 9535 karena perbedaan filter, gabungan, dan fungsi. Jika hasil terlihat salah, beralihlah toggle mesin agar cocok dengan dialek yang menjadi tujuan penulisan ekspresi.
Classic filter run under RFC 9535 → parse error or unexpected nodes
Switch engine to Classic (Goessner) → reproduces the original result
Memanggil fungsi RFC 9535 sebagai segmen mandiri
length(), count(), match(), search(), dan value() adalah ekstensi fungsi RFC 9535 yang hanya valid di dalam filter [?...]. Pemanggilan segmen mandiri seperti $.store.book.length() ditolak oleh tata bahasa RFC 9535 (ia adalah ekstensi jsonpath-plus, bukan standar). Panggil fungsi di dalam filter, dan gunakan mesin RFC 9535 default — mesin Klasik (Goessner) tidak mengimplementasikan fungsi-fungsi ini.
$.store.book.length() → parse error (not a valid RFC 9535 segment)
$.store.book[?length(@.title) > 15] → books with a title over 15 chars
Lupa @ di dalam ekspresi filter
Di dalam filter [?()], elemen saat ini adalah @, bukan $. Menulis $.price merujuk kembali ke akar dokumen alih-alih elemen yang diuji, sehingga filter memilih tidak ada atau semuanya. Gunakan @ untuk mengalamatkan anggota dari elemen yang sedang disaring.
$.store.book[?($.price < 10)] → wrong scope
$.store.book[?(@.price < 10)] → books under 10
Mengutip nama anggota dengan sintaks yang salah
Notasi kurung memerlukan tanda kutip di sekitar kunci string: $['store'] atau $.store keduanya berfungsi, tetapi $[store] (tanpa kutip di dalam kurung) adalah kesalahan indeks/pengidentifikasi. Gunakan tanda kutip di dalam kurung untuk kunci apa pun dengan spasi, titik, atau karakter khusus: $['first name'].
$[store][book] → invalid bracket selectors
$['store']['book'] → same as $.store.book
Mengharapkan penurunan rekursif berhenti di tingkat pertama
$..author tidak berhenti di atas — ia mengumpulkan setiap anggota author di setiap kedalaman. Jika Anda hanya menginginkan anak langsung, eja path-nya. Penurunan rekursif atas dokumen besar dapat mengembalikan jauh lebih banyak node daripada yang dimaksudkan.
$..price → every price anywhere in the tree
$.store.book[*].price → only book prices
Siapa yang Menggunakan Alat Ini
- Ekstrak Bidang dari Respons API
- Tarik ID permintaan, atribut sumber daya tersarang, atau daftar nama dari payload JSON tanpa menulis kode penelusuran. Bangun path di sini terhadap respons sampel, konfirmasi ia mengembalikan persis node yang Anda inginkan di tampilan Values, lalu tempel ekspresi yang divalidasi ke aplikasi atau pengujian Anda.
- Tulis Asersi untuk Pengujian Integrasi
- Banyak kerangka kerja pengujian dan alat pengujian-kontrak (REST Assured, Karate, Postman) menggunakan JSONPath untuk menegaskan badan respons. Susun path asersi di sini, verifikasi ia memilih node yang tepat terhadap respons nyata, dan salin ke pengujian Anda — menangkap path yang salah sebelum suite menjadi merah.
- Konfigurasi Transformasi Data dalam Pipeline
- Kubernetes, AWS Step Functions, Azure Logic Apps, dan banyak alat ETL menerima JSONPath untuk mengalamatkan bidang dalam payload kejadian. Prototipekan path persis terhadap kejadian representatif di sini, konfirmasi ia menyelesaikan, dan letakkan ke konfigurasi pipeline Anda dengan keyakinan bahwa ia menunjuk ke tempat yang Anda maksudkan.
- Reproduksi Hasil jsonpath.com secara Privat
- Memiliki ekspresi dari evaluator berbasis server tetapi tidak dapat menempel data Anda ke situs pihak ketiga? Beralihlah ke mode Klasik (Goessner), muat JSON Anda, dan reproduksi hasil yang sama secara lokal — tidak ada payload yang pernah meninggalkan browser Anda, sehingga data berpemilik tetap di mesin Anda.
- Migrasikan Ekspresi Lawas ke RFC 9535
- Beralih ke sistem yang mengiklankan kepatuhan RFC 9535? Jalankan ekspresi lawas dalam mode Klasik, lalu beralih ke mesin RFC 9535 untuk melihat apakah ia masih diurai dan mencocokkan node yang sama. Perbandingan mesin ganda menunjukkan dengan tepat perbedaan filter, gabungan, dan fungsi yang sebaliknya akan Anda temui di produksi.
- Debug Mengapa Sebuah Path Mengembalikan Node yang Salah
- Sebuah path yang memilih terlalu banyak atau terlalu sedikit sulit dipikirkan dari nilai saja. Beralihlah ke tampilan Paths untuk melihat lokasi ternormalisasi setiap kecocokan — indeks larik persis, rantai anggota persis — dan irisan off-by-one atau penurunan rekursif liar menjadi jelas seketika.
- Ajarkan atau Tinjau JSONPath
- Buka ekspresi yang berfungsi terhadap data sampel dan telusuri selektor demi selektor, beralih antara Values dan Paths sehingga pembelajar melihat baik apa yang dipilih maupun di mana ia berada. Lembar contekan dan contoh yang dikerjakan memberikan referensi terstruktur untuk tinjauan kode atau onboarding.
Catatan Mesin & Algoritme
- Mesin RFC 9535 (jsonpath-rfc9535, Tanpa Dependensi)
- Mesin default mengimplementasikan tata bahasa IETF RFC 9535 secara langsung: ia mentokenisasi dan mengurai ekspresi menjadi pohon sintaks abstrak dan menafsirkannya terhadap dokumen. Tidak ada eval dan tidak ada konstruktor Function di mana pun dalam jalur, sehingga ia kebal terhadap kelas bug injeksi-eval dan berjalan di bawah Content-Security-Policy yang ketat.
- Mesin Klasik (jsonpath-plus, Eval Dinonaktifkan)
- Mesin Klasik (Goessner) adalah jsonpath-plus, disematkan ke rilis yang ditambal (>= 10.4.0) dan dikonstruksi dengan opsi eval disetel secara eksplisit ke false. Itu mempertahankan kompatibilitas dialek-Goessner sambil menutup vektor eksekusi kode jarak jauh yang dilacak sebagai CVE-2024-21534 dan CVE-2025-1302, yang memengaruhi jalur filter berbasis eval default pustaka.
- Pembuatan Path Ternormalisasi
- Setiap kecocokan dilaporkan dengan path ternormalisasi RFC 9535-nya — bentuk kanonis menggunakan notasi kurung berkutip-tunggal ($['store']['book'][0]['title']) dengan indeks larik sebagai integer telanjang. Path ternormalisasi stabil dan unik per node, sehingga ekspresi setara menghasilkan path identik, yang diandalkan tampilan Paths dan Both untuk identifikasi hasil yang tidak ambigu.
- Potongan Mesin yang Dimuat Malas
- Kedua mesin dimuat sebagai potongan JavaScript terpisah hanya saat pertama kali dipilih, sehingga halaman awal tetap ringan dan mesin yang tidak Anda gunakan tidak pernah diunduh. Beralih mesin mengevaluasi ulang ekspresi saat ini terhadap dokumen saat ini seketika, tanpa muat ulang halaman.
- Pembacaan Berkas Lokal dan Pemformatan JSON
- Tombol Unggah menggunakan API FileReader browser untuk membaca berkas .json atau .txt ke dalam masukan sepenuhnya sisi-klien — berkas tidak pernah dikirimkan. Format JSON mengurai dan menserialisasi ulang masukan dengan indentasi dua spasi, memunculkan kesalahan parse sebaris sehingga JSON yang cacat tertangkap sebelum evaluasi.
- Tautan Permanen via Hash URL (Tidak Pernah Dikirimkan)
- Keadaan berbagi dikodekan dalam fragmen location.hash, membawa JSON, ekspresi, mesin aktif, dan tampilan hasil. Browser tidak pernah menyertakan fragmen dalam permintaan HTTP, sehingga server go-tools.org menerima nol data saat tautan permanen dibuka; hidrasi terjadi sepenuhnya di perangkat penerima.
Praktik Terbaik JSONPath
- Pilih Mesin yang Cocok dengan Target Anda
- Jika sistem hilir Anda mengiklankan kepatuhan RFC 9535, tulis dan validasi terhadap mesin RFC 9535. Jika Anda mereproduksi atau memelihara ekspresi dari alat atau pustaka lebih lama, gunakan Klasik (Goessner). Validasi terhadap dialek yang salah adalah alasan paling umum mengapa path yang berfungsi di penguji gagal di produksi.
- Verifikasi dengan Tampilan Paths, Bukan Hanya Values
- Tampilan Values memberi tahu Anda apa yang cocok; tampilan Paths memberi tahu Anda di mana. Saat kueri mengembalikan nilai yang terlihat benar, ia mungkin masih memilihnya dari lokasi yang salah — penurunan rekursif liar atau wildcard yang terlalu luas. Periksa path ternormalisasi untuk mengonfirmasi ekspresi mengenai persis node yang Anda maksudkan.
- Perhatikan Akhir Eksklusif dari Irisan
- [0:2] memilih indeks 0 dan 1, bukan 0 hingga 2 — batas akhir bersifat eksklusif, persis seperti Python dan JavaScript. Kesalahan irisan off-by-one adalah bug JSONPath paling sering. Gunakan tampilan Paths untuk membaca indeks persis setiap elemen yang dipilih dan konfirmasi batas sebelum Anda mengirim.
- Utamakan Path Eksplisit Dibanding Penurunan Rekursif Bila Bisa
- $..price nyaman tetapi mencocokkan setiap price di mana pun dalam dokumen, termasuk yang tidak Anda maksudkan. Saat Anda mengetahui strukturnya, eja path ($.store.book[*].price) agar kueri tetap presisi dan dapat diprediksi seiring data bertumbuh. Cadangkan .. untuk bentuk yang benar-benar tidak beraturan atau tidak dikenal.
- Jaga Spasi dan Tanda Kutip Konsisten dalam Filter
- RFC 9535 mengikuti tata bahasanya secara persis untuk ekspresi filter, sementara dialek klasik lebih longgar. Tulis filter dengan bersih — kutip literal string dengan tanda kutip tunggal ('fiction'), jaga operator diberi spasi, dan hindari mengandalkan parsing yang longgar — sehingga ekspresi yang sama dievaluasi dengan cara yang sama terlepas dari mesin atau pustaka mana yang akhirnya menjalankannya.
Pertanyaan yang Sering Diajukan
Apakah JSON atau ekspresi JSONPath saya dikirim ke server Anda?
Apa itu JSONPath dan untuk apa ia digunakan?
Apa perbedaan antara RFC 9535 dan sintaks Goessner klasik?
Mengapa ekspresi yang sama mengembalikan hasil berbeda di kedua mesin, dan bagaimana cara saya menggunakan ekspresi yang disalin dari jsonpath.com?
Bagaimana ekspresi filter [?()] bekerja?
Apa yang dilakukan penurunan rekursif (..)?
Apa itu fungsi RFC 9535 length(), count(), match(), search(), dan value()?
Bagaimana irisan larik [start:end:step] bekerja?
Apa itu selektor gabungan dan bagaimana cara memilih beberapa kunci sekaligus?
Bisakah saya membagikan kueri JSONPath dan JSON-nya melalui tautan?
Apakah ada ukuran JSON maksimum?
Bagaimana ini berbeda dari jsonpath.com dan apakah aman — tanpa eval?
Apa yang ditampilkan tampilan Values, Paths, dan Both?
Apakah ini bekerja offline, dan bagaimana dengan Content-Security-Policy?
Alat Terkait
Lihat semua alat →Decode & Encode Base64 Online — Konversi Instan di Browser
Encoding & Pemformatan
Decode dan encode Base64 online gratis. Konversi real-time dengan dukungan UTF-8 dan emoji. 100% privat di browser Anda. Tanpa pendaftaran.
Konverter Base64 ke Gambar
Encoding & Pemformatan
Decode string Base64 atau data URI kembali menjadi gambar di browser. Pratinjau, baca dimensi & MIME, lalu unduh sebagai PNG, JPG, GIF, SVG. Tanpa upload.
Konverter CSV ke JSON
Encoding & Pemformatan
Konversi CSV ke JSON di browser. RFC 4180, infer tipe, baris header, aman big-int. 100% privat, tanpa unggah.
Konverter .env ke JSON
Encoding & Pemformatan
Tempel file .env, dapatkan JSON seketika. Password, kunci API, dan token tak pernah keluar dari browser — parser dotenv 100% privat, tanpa unggah, gratis.
Konverter HTML ke Markdown
Encoding & Pemformatan
Konversi HTML menjadi Markdown bersih di browser Anda — tabel GFM, daftar tugas, tautan. Pilih heading ATX/Setext serta tautan inline atau reference. Cocok untuk migrasi konten web atau memberi makan LLM. 100% privat.
Konverter Gambar ke Base64
Encoding & Pemformatan
Konversi gambar ke data URI Base64 di browser — PNG, JPG, GIF, WebP, SVG, ICO. Salin output HTML, CSS, Markdown & JSON. 100% privat, tanpa upload.