Utilia

JSONPath Tester

Uji ekspresi JSONPath pada JSON Anda sendiri di browser. Filter, slice, recursive descent, path, dan JSON Pointer, dengan contoh-contoh siap pakai.

Cara menguji ekspresi JSONPath

  1. Tempel JSON Anda di Data JSON, atau klik Muat data contoh untuk memakai contoh toko buku klasik.
  2. Ketik ekspresi di Ekspresi JSONPath, atau pilih salah satu dari Contoh.
  3. Hasilnya diperbarui saat Anda mengetik; Jalankan kueri menjalankannya lagi. Baris status menampilkan jumlah kecocokan.
  4. Gunakan Tampilkan untuk beralih antara Nilai, Path, JSON Pointer, dan Path dan nilai, lalu salin hasilnya.

Ringkasan sintaks JSONPath

Sintaks Arti Contoh
$ root dokumen $
.name atau ['name'] anak (child) $.store.bicycle
* setiap anak $.store.*
.. recursive descent, di kedalaman mana pun $..author
[n] indeks array, mulai dari 0 $..book[2]
[start:end:step] slice; angka negatif dihitung dari akhir $..book[-1:]
[a,b] union $..book[0,1]
[?(expr)] filter $..book[?(@.price < 10)]
^ induk dari setiap kecocokan $..book[?(@.price > 20)]^
~ nama properti, bukan nilainya $.store.*~

Hasil dikembalikan sesuai urutan di dokumen. Path memberikan path yang dinormalisasi seperti $['store']['book'][0]['title'], dan JSON Pointer memberikan bentuk RFC 6901 /store/book/0/title, praktis untuk JSON Patch atau untuk path kesalahan dari validator JSON Schema.

Ekspresi filter: apa saja yang didukung

Filter dievaluasi dengan jsonpath-plus dalam safe mode: ekspresi di-parse dan diinterpretasikan oleh evaluator kecil, tidak pernah diteruskan ke eval atau new Function. Di dalam [?( … )] Anda bisa memakai:

  • @ untuk item saat ini, @.field dan @['field'] untuk anggotanya, @root untuk seluruh dokumen ($ tidak tersedia di dalam filter);
  • perbandingan ==, !=, ===, !==, <, <=, >, >=;
  • logika &&, ||, !, aritmetika + - * / %, dan ternary a ? b : c;
  • literal string, angka, true, false, null, dan regular expression;
  • method dari nilai itu sendiri, misalnya @.title.startsWith('S'), @.tags.includes('new'), atau @.title.match(/lord/i);
  • @property (key atau indeks item saat ini), @parent, dan @path (path yang dinormalisasi), dalam gaya jsonpath-plus.

Akses ke constructor, __proto__, dan konstruktor Function diblokir. Jika filter gagal pada satu item, misalnya @.isbn.startsWith('0') pada buku tanpa isbn, item itu cukup dianggap tidak cocok; kesalahan sintaksis pada ekspresi dilaporkan. Filter yang ditulis dengan gaya RFC 9535, [?@.price < 10] tanpa tanda kurung, diterima dan dibaca sebagai [?(@.price < 10)]. Fungsi RFC 9535 seperti length(), count(), match(), dan search() tidak tersedia: gunakan method JavaScript seperti @.name.length sebagai gantinya.

Type selector dari jsonpath-plus juga berfungsi di akhir path: $..*@number() mengembalikan setiap angka, dan @string(), @boolean(), @array(), @object(), @null(), serta @integer() melakukan hal yang sama untuk tipe lain.

Pertanyaan yang sering diajukan

Apakah JSON saya dikirim ke server?

Tidak. Parsing dan evaluasi berlangsung di browser Anda, dan data Anda tidak pernah meninggalkan komputer Anda.

Mengapa filter saya tidak mengembalikan apa pun?

Pastikan path sebelum filter memilih array atau objek: $.store.book[?(@.price < 10)] memfilter buku-buku, sedangkan $.store[?(@.price < 10)] memeriksa book dan bicycle. Properti yang tidak ada di suatu item bernilai undefined, sehingga perbandingan dengannya bernilai false.

Apa bedanya `==` dan `===`?

Seperti di JavaScript, == mengonversi tipe ("10" == 10 bernilai true), sedangkan === membandingkan tipe dan nilai.

Mengapa hasilnya dibatasi?

Hanya 10.000 kecocokan pertama yang ditulis ke hasil, agar halaman tetap responsif; baris status menampilkan jumlah lengkapnya.

Apakah JSONPath sudah distandardisasi?

Ya, sejak 2024, melalui RFC 9535. Implementasinya masih berbeda-beda, terutama pada filter; alat ini mengikuti jsonpath-plus, sintaks JSONPath asli karya Stefan Goessner.