JSON Toolkit

JSONPath atau JSON Pointer

Inti pati: JSON Pointer ialah alamat unik yang boleh anda simpan sebagai kunci; JSONPath ialah bahasa pertanyaan. Menggunakan yang salah merosakkan kemas kini konfigurasi atau mencipta semula JSONPath yang rosak.

Pertengahan~4 min bacaanDiterbitkan 2026-10-30Dikemas kini 2026-10-30
Di mana JSONPath tamat dan JSON Pointer bermula

Pokoknya: guna JSON Pointer apabila anda perlu membaca, menulis atau menyimpan alamat satu nod (contohnya /server/cors/0), dan JSONPath apabila anda perlu memilih satu set nod mengikut syarat; mana-mana laluan yang disimpan mestilah Pointer, tidak pernah ungkapan.

Tanyakan sama ada anda memerlukan satu nod atau satu set nod.

Dalam satu jadual

JSON Pointer JSONPath
Sifat Alamat unik Ungkapan pertanyaan
Sintaks /a/b/0 $.a.b[0], $..price
Hasil Tepat satu nod, atau tiada Sifar atau lebih nod
Boleh disimpan sebagai kunci Ya, rentetan itu ialah identiti Tidak, mungkin memadankan banyak
Piawaian RFC 6901 RFC 9535 (dimuktamadkan 2024)

JSON Pointer

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

Kunci yang mengandungi / atau ~ di-escape: ~0 untuk ~, ~1 untuk /. Nilainya ialah sifat tentu: alamat itu ialah rentetan, jadi ia sesuai untuk lajur pangkalan data, baris log, atau kunci konfigurasi. JSON Patch (RFC 6902) menangani setiap operasi dengan cara ini.

JSONPath

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

Lebih dekat dengan WHERE dalam SQL. Ungkapan yang sama mengembalikan sifar, satu atau seratus nod bergantung pada data.

Dua mod kegagalan

Menggunakan JSONPath sebagai kunci konfigurasi. Simpan $.server.port dan suatu hari struktur menjadi tatasusunan; ungkapan itu kini memadankan beberapa port dan logik kemas kini tidak mempunyai cara untuk memilih.

Menggunakan Pointer untuk pemilihan. "Cari setiap nod yang harganya di bawah 10" mustahil dengan pointer. Menulis gelung itu sendiri bermakna membina JSONPath separa.

Bagaimana sistem sebenar membahagikan kerja

  • Bacaan konfigurasi, kemas kini medan, patch: Pointer, tetap dan boleh diaudit
  • Penerokaan data, pengekstrakan pukal, pelaporan: JSONPath, keunggulan ekspresif dahulu
  • Apa-apa yang disimpan: Pointer sahaja, tidak pernah ungkapan

Soalan Lazim

Bagaimana saya harus memilih antara JSON Pointer dan JSONPath?

Tanyakan sama ada anda memerlukan satu nod atau satu set. Guna JSON Pointer untuk membaca atau menulis satu nod tertentu dan untuk menyimpan alamat itu sebagai kunci, kerana pointer itu unik, contohnya /server/cors/0. Guna JSONPath untuk memilih nod mengikut syarat, contohnya $.store.book[?(@.price < 10)].

Mengapa ungkapan JSONPath tidak boleh digunakan sebagai kunci konfigurasi?

Kerana ungkapan itu mungkin memadankan beberapa nod. Simpan $.server.port dan suatu hari struktur menjadi tatasusunan; ungkapan itu kemudian memadankan berbilang port dan logik kemas kini tidak dapat menentukan yang mana untuk diubah. Apa-apa yang disimpan atau diaudit memerlukan Pointer.

Bolehkah JSON Pointer menapis nod mengikut syarat?

Tidak. Pointer hanya melangkah melalui laluan tetap dan tiada cara untuk mengetahui nod mana yang wujud, jadi memilih setiap nod yang harganya di bawah 10 adalah mustahil. Menulis gelung itu sendiri bermakna membina JSONPath separa.

Bacaan lanjut