JSON Toolkit

JSONPath atau JSON Pointer

Intinya: JSON Pointer adalah alamat unik yang bisa disimpan sebagai key; JSONPath adalah bahasa query. Memakai yang salah akan merusak pembaruan konfigurasi atau membuat Anda menemukan kembali JSONPath yang cacat.

Menengah±4 menit bacaDiterbitkan 2026-10-30Diperbarui 2026-10-30
Di mana JSONPath berakhir dan JSON Pointer dimulai

Intinya: pakai JSON Pointer saat perlu membaca, menulis atau menyimpan alamat satu node (misalnya /server/cors/0), dan JSONPath saat perlu memilih sekumpulan node berdasarkan kondisi; path apa pun yang dipersistenkan harus berupa Pointer, jangan pernah berupa ekspresi.

Tanyakan apakah Anda butuh satu node atau sekumpulan node.

Dalam satu tabel

JSON Pointer JSONPath
Hakikat Alamat unik Ekspresi query
Sintaks /a/b/0 $.a.b[0], $..price
Hasil Tepat satu node, atau tidak ada Nol atau lebih node
Dapat disimpan sebagai key Ya, string adalah identitasnya Tidak, bisa cocok dengan banyak node
Standar RFC 6901 RFC 9535 (final 2024)

JSON Pointer

/server/host        -> "127.0.0.1"
/server/cors/0      -> "https://a.com"
/                   -> the whole document

Key yang mengandung / atau ~ di-escape: ~0 untuk ~, ~1 untuk /. Nilainya adalah determinisme: alamat berupa string, sehingga pas untuk kolom database, baris log, atau key konfigurasi. JSON Patch (RFC 6902) mengalamatkan setiap operasi dengan cara ini.

JSONPath

$.store.book[*].author
$..price
$.store.book[?(@.price < 10)]

Lebih mirip WHERE di SQL. Ekspresi yang sama mengembalikan nol, satu atau seratus node tergantung datanya.

Dua mode kegagalan

Memakai JSONPath sebagai key konfigurasi. Simpan $.server.port, lalu suatu hari strukturnya menjadi array; ekspresi itu kini cocok dengan beberapa port dan logika pembaruan tidak punya cara untuk memilih.

Memakai Pointer untuk seleksi. "Temukan setiap node yang harganya di bawah 10" mustahil dengan pointer. Menulis loop sendiri berarti membangun JSONPath parsial.

Bagaimana sistem nyata membagi tugas

  • Pembacaan konfigurasi, pembaruan field, patch: Pointer, tetap dan dapat diaudit
  • Eksplorasi data, ekstraksi massal, pelaporan: JSONPath, mengutamakan daya ekspresi
  • Apa pun yang dipersistenkan: hanya Pointer, jangan pernah ekspresi

FAQ

Bagaimana saya harus memilih antara JSON Pointer dan JSONPath?

Tanyakan apakah Anda butuh satu node atau sekumpulan node. Pakai JSON Pointer untuk membaca atau menulis satu node tertentu dan menyimpan alamat itu sebagai key, karena pointer bersifat unik, misalnya /server/cors/0. Pakai JSONPath untuk memilih node berdasarkan kondisi, misalnya $.store.book[?(@.price < 10)].

Mengapa ekspresi JSONPath tidak bisa dipakai sebagai key konfigurasi?

Karena ekspresi itu bisa cocok dengan beberapa node. Simpan $.server.port, lalu suatu hari strukturnya menjadi array; ekspresi itu kemudian cocok dengan beberapa port dan logika pembaruan tidak bisa memutuskan mana yang harus diubah. Apa pun yang dipersistenkan atau diaudit membutuhkan Pointer.

Bisakah JSON Pointer memfilter node berdasarkan kondisi?

Tidak. Pointer hanya menelusuri path tetap dan tidak punya cara untuk mengetahui node mana yang ada, sehingga memilih setiap node yang harganya di bawah 10 mustahil. Menulis loop itu sendiri berarti membangun JSONPath parsial.

Bacaan lanjutan