1. Gambaran keseluruhan
Dalam tutorial ini, kami akan menunjukkan cara menggunakan JSON Pointer untuk menavigasi dan mengambil maklumat dari data JSON .
Kami juga akan menunjukkan cara melakukan operasi seperti memasukkan data baru atau mengemas kini nilai kunci yang ada.
2. Persediaan Ketergantungan
Pertama, kita perlu menambahkan beberapa kebergantungan pada pom.xml kami :
org.glassfish javax.json 1.1.2
3. Penunjuk JSON
JSON ("Notasi Objek JavaScript") adalah format ringan untuk pertukaran data antara sistem, yang awalnya ditentukan oleh Douglas Crockford.
Walaupun menggunakan sintaks JavaScript , bahasa itu tidak bergantung pada bahasa, kerana hasilnya adalah teks biasa .
JSON Pointer (RFC 6901) adalah ciri dari JSON Processing 1.1 API (JSR 374). Ini menentukan String yang dapat digunakan untuk mengakses nilai pada dokumen JSON. Ini boleh berkaitan dengan apa yang dilakukan XPath untuk dokumen XML.
Melalui penggunaan JSON Pointer, kita dapat mengambil data dari dan mengubah fail JSON.
4. Mengakses Data
Kami akan melihat beberapa contoh bagaimana melakukan operasi dengan melaksanakan kelas yang disebut JsonPointerCrud .
Katakan kita mempunyai fail JSON yang disebut books.json dengan kandungan:
{ "library": "My Personal Library", "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }
Untuk mengakses data dari fail itu, kita perlu membacanya dan menguraikannya ke JsonStructure . Kita dapat mencapainya menggunakan kaedah Json.createReader () , yang menerima InputStream atau FileReader .
Inilah cara kita dapat melakukannya:
JsonReader reader = Json.createReader(new FileReader("books.json")); JsonStructure jsonStructure = reader.read(); reader.close();
Kandungannya akan disimpan pada objek JsonStructure . Ini adalah objek yang akan kita gunakan untuk melakukan operasi seterusnya.
4.1. Ambil Data dari Fail
Untuk mendapatkan satu nilai, kami membuat JsonPointer , memberitahu tag mana yang ingin kami dapatkan dari:
JsonPointer jsonPointer = Json.createPointer("/library"); JsonString jsonString = (JsonString) jsonPointer.getValue(jsonStructure); System.out.println(jsonString.getString());
Perhatikan bahawa watak pertama String ini adalah ' /' - ini adalah syarat sintaksis .
Hasil coretan ini adalah:
My Personal Library
Untuk mengambil nilai dari senarai, kita perlu menentukan indeksnya (di mana indeks pertama adalah 0):
JsonPointer jsonPointer = Json.createPointer("/books/1"); JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); System.out.println(jsonObject.toString());
Ini menghasilkan:
"title":"Title 2", "author":"John Doe"
4.2. Periksa Jika Kunci Ada dalam Fail
Melalui kaedah mengandungValue , kita dapat memeriksa apakah nilai yang digunakan untuk membuat pointer ada pada file JSON:
JsonPointer jsonPointer = Json.createPointer("/library"); boolean found = jsonPointer.containsValue(jsonStructure); System.out.println(found);
Hasil untuk coretan ini adalah:
true
4.3. Masukkan Nilai Kunci Baru
Sekiranya kita perlu menambahkan nilai baru pada JSON, createValue adalah yang harus menanganinya. Kaedah createValue berlebihan untuk menerima String , int , long , double , BigDecimal dan BigInteger:
JsonPointer jsonPointer = Json.createPointer("/total"); JsonNumber jsonNumber = Json.createValue(2); jsonStructure = jsonPointer.add(jsonStructure, jsonNumber); System.out.println(jsonStructure);
Sekali lagi, output kami adalah:
{ "library": "My Personal Library", "total": 2, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }
4.4. Kemas kini Nilai Utama
Untuk mengemas kini nilai, kita perlu membuat nilai baru terlebih dahulu . Setelah nilai dibuat, kami menggunakan kaedah ganti dari penunjuk yang dibuat menggunakan parameter kunci:
JsonPointer jsonPointer = Json.createPointer("/total"); JsonNumber jsonNumberNewValue = Json.createValue(5); jsonStructure = jsonPointer.replace(jsonStructure, jsonNumberNewValue); System.out.println(jsonStructure);
Mengeluarkan:
{ "library": "My Personal Library", "total": 5, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }
4.5. Keluarkan Kunci
Untuk mengeluarkan kunci, kami mula-mula membuat penunjuk ke kunci. Kami kemudian menggunakan kaedah membuang:
JsonPointer jsonPointer = Json.createPointer("/library"); jsonPointer.getValue(jsonStructure); jsonStructure = jsonPointer.remove(jsonStructure); System.out.println(jsonStructure);
Mengakibatkan:
{ "total": 5, "books": [ { "title":"Title 1", "author":"Jane Doe" }, { "title":"Title 2", "author":"John Doe" } ] }
4.6. Tunjukkan Kandungan Fail Lengkap
Sekiranya penunjuk dibuat dengan String kosong , keseluruhan kandungan diambil:
JsonPointer jsonPointer = Json.createPointer(""); JsonObject jsonObject = (JsonObject) jsonPointer.getValue(jsonStructure); System.out.println(jsonObject.toString());
Contoh kod ini akan mengeluarkan keseluruhan isi struktur json .
5. Kesimpulan
Dalam artikel ringkas ini, kami telah membahas bagaimana bekerjasama dengan JSON Pointer untuk melakukan pelbagai operasi pada data JSON.
Dan, seperti biasa, kod yang berkaitan dengan tutorial ini sudah habis di GitHub.