Streaming API membaca dan menulis acara diskrit ke konten JSON. JsonParser membaca data, sementara JSongenerator menulis data. Ini adalah metode yang paling efisien dari ketiganya, dengan overhead terendah dan operasi baca/tulis tercepat. Ini mirip dengan parser stax untuk XML.
Dalam artikel ini, kami akan menunjukkan cara membaca dan menulis data JSON menggunakan API streaming Jackson. Streaming API bekerja menggunakan JSON untuk setiap detail harus ditangani dengan hati -hati. Contoh berikut akan menggunakan dua kelas:
Kelas JSongenerator - Menulis ke string JSON.
Songenerator adalah kelas dasar yang mendefinisikan konten JSON yang ditulis oleh API publik. Buat instance menggunakan metode pabrik dari instance JSONFactory.
Deklarasi kelas berikut ini adalah deklarasi org.codehaus.jackson.jsongenerator kelas:
Kelas abstrak publik JSongenerator memperluas objek mengimplementasikan ditutup
Kelas bersarang
| Sn | Kelas dan deskripsi |
|---|---|
| 1 | Kelas statis jsongenerator.feature // enumeration mendefinisikan semua fungsi yang dapat diaktifkan dari generator. |
Konstruktor
| Sn | Kelas dan deskripsi |
|---|---|
| 1 | Konstruktor default |
Kelas JsonParser - Parses Json Strings.
JsonParser adalah kelas dasar yang mendefinisikan konten JSON yang digunakan oleh API publik untuk dibaca. Buat instance menggunakan metode pabrik dari instance JSONFactory.
Deklarasi kelas berikut ini adalah deklarasi kelas org.codehaus.jackson.jsonparser:
kelas abstrak publik jsonparser memperluas objek mengimplementasikan ditutup, versi
Kelas bersarang
| Sn | Kelas dan deskripsi |
|---|---|
| 1 | Kelas statis jsonparser.feature // enumeration mendefinisikan semua fungsi parser yang dapat diubah. |
| 2 | Kelas statis jsonparser.numberType // Pencacahan dapat digunakan untuk kemungkinan "lokal" (optimal) jenis angka. |
Konstruktor
| Sn | Kelas dan deskripsi |
|---|---|
| 1 | JsonParser yang dilindungi () // Konstruktor default |
| 2 | JsonParser yang dilindungi (fitur int) |
Metode yang diwariskan Kelas ini mewarisi metode kelas berikut:
Salinan kode adalah sebagai berikut:
java.lang.Object
Menulis ke JSON menggunakan jsongenerator
Menggunakan jsongenerator sangat sederhana. Pertama, gunakan metode JSONFactory.CreateJSongenerator () untuk membuat JSongenerator, dan gunakan metode Write *** () untuk menulis setiap nilai JSON.
Jsonfactory jasonfactory = new jsonfactory (); jsongenerator jsongenerator = jasonfactory.createJsongenerator (file baru ("student.json"), jsonencoding.utf8); // {jsongenerator.writestArtObject ();/// "nama": "jsongenerator.writestArtObject ();/" "Mahesh Kumar");Mari kita lihat operasi jsongenerator. Buat file kelas Java bernama Jacksontester di Direktori C:/> Jackson_Workspace.
File: jacksontester.java
Impor java.io.file; impor java.io.ioException; impor java.util.map; impor org.codehaus.jackson.jsonencoding; impor org.codehaus.jackson.jsonfactory; import org.codehaus.Jackson.jsongenerator; impor org.codeHaus. org.codehaus.jackson.map.jsonmappingException; impor org.codehaus.jackson.map.objectMapper; kelas publik jacksontester {public static void main (string args []) {jacksontester tester = new jacksontester (); coba {jsonfactory jasonfactory = new jsonfactory (); Jsongenerator jsongenerator = jasonfactory.createJsongenerator (file baru ("student.json"), jsonencoding.utf8); // {jsongenerator.writestArtArtObject (); // "Nama": "Mahesh Kumar" Jsongenerator.WriteStringfield ("Nama", "Mahesh Kumar"); // "Umur": 21 JSongenerator.Writenumberfield ("Age", 21); // "diverifikasi": false jsongenerator.writebooleanfield ("diverifikasi", false); // "tanda": [100, 90, 85] jsongenerator.writefieldname ("tanda"); // [jsongenerator.writestArtArray (); // 100, 90, 85 jsongenerator.writenumber (100); jsongenerator.writenumber (90); jsongenerator.writenumber (85); //] jsongenerator.writeDarray (); //} jsongenerator.writeendObject (); jsongenerator.close (); // hasil student.json // {// "name": "Mahesh Kumar", // "Umur": 21, // "Diverifikasi": false, // "Marks": [100,90,85] //} ObjectMapper mapper = ObjectMapper baru (); Peta <String, Object> datamap = mapper.readValue (file baru ("student.json"), map.class); System.out.println (datamap.get ("name")); System.out.println (datamap.get ("usia")); System.out.println (datamap.get ("diverifikasi")); System.out.println (datamap.get ("tanda")); } catch (jsonparseException e) {e.printstacktrace (); } catch (JsonMappingException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}}Hasil verifikasi
Gunakan Javac untuk mengkompilasi kelas berikut:
Salinan kode adalah sebagai berikut:
C:/jackson_workspace> javac jacksontester.java
Sekarang jalankan Jacksontester untuk melihat hasilnya:
Salinan kode adalah sebagai berikut:
C:/Jackson_Workspace> Java Jacksontester
Verifikasi output
Mahesh Kumar21False [100, 90, 85]
Baca json menggunakan jsonparser
Menggunakan jsonparser sangat sederhana. Pertama -tama buat JSONParser menggunakan metode JSONFactory.CreateJsonParser () dan gunakan metode nextToken () untuk membaca setiap string JSON sebagai tag. Periksa setiap token dan proses yang sesuai.
Jsonfactory jasonfactory = new jsonfactory (); jjsonparser jsonparser = jasonfactory.createJsonParser (file baru ("student.json")); while (jsonparser.nextToken ()! = Jsontoken.end_object) {// dapatkan saat ini; if ("name" .equals (fieldName)) {// pindah ke token berikutnya jsonparser.nextToken (); System.out.println (jsonparser.getText ()); }}Mari kita lihat operasi JsonParser. Buat kelas bernama Jacksontester di Java di folder C:/> jackson_workspace.
File: jacksontester.java
Impor java.io.file; impor java.io.ioException; impor org.codehaus.jackson.jsonencoding; impor org.codehaus.jackson.jsonfactory; impor org.codehaus.jackson.jsongenerator; import org.codehaus.jackson.jsonparsexceptcepticceptcceptcceptcceptcception; org.codehaus.jackson.jsonparsexceptceptceptcceptcception; org.codehaus.jackson.jsontoken; impor org.codehaus.jackson.map.jsonmappingException; kelas publik jacksontester {public static void main (string args []) {jacksontester tester = new jacksontester (); coba {jsonfactory jasonfactory = new jsonfactory (); Jsongenerator jsongenerator = jasonfactory.createJsongenerator (file baru ("student.json"), jsonencoding.utf8); jsongenerator.writestArtObject (); jsongenerator.writeStringfield ("nama", "Mahesh Kumar"); jsongenerator.writenumberfield ("usia", 21); jsongenerator.writebooleanfield ("diverifikasi", false); jsongenerator.writeFieldName ("tanda"); jsongenerator.writestArtArray (); // [jsongenerator.writenumber (100); jsongenerator.writenumber (90); jsongenerator.writenumber (85); jsongenerator.writeDarray (); jsongenerator.writeendObject (); jsongenerator.close (); // hasil student.json // {// "name": "Mahesh Kumar", // "usia": 21, // "diverifikasi": false, // "marks": [100,90,85] //} jsonparser jsonparser = jasonfactory.cratejsonparser ("baru file (" while (jsonparser.nextToken ()! = jsontoken.end_object) {// Dapatkan token string saat ini saat ini = jsonparser.getCurrentName (); if ("name" .equals (fieldName)) {// pindah ke token berikutnya jsonparser.nextToken (); System.out.println (jsonparser.getText ()); } if ("Age" .Equals (fieldName)) {// pindah ke Token berikutnya jsonparser.nextToken (); System.out.println (jsonparser.getNumberValue ()); } if ("diverifikasi" .Equals (fieldName)) {// pindah ke token berikutnya jsonparser.nextToken (); System.out.println (jsonparser.getBooleanValue ()); } if ("marks" .Equals (fieldName)) {// pindah ke [jsonparser.nextToken (); // loop hingga token sama dengan "]" while (jsonparser.nextToken ()! = jsontoken.end_array) {System.out.println (jsonparser.getNumberValue ()); }}}} catch (jsonparseException e) {e.printstacktrace (); } catch (JsonMappingException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); }}}Hasil verifikasi
Kompilasi Gunakan Javac untuk mengkompilasi kelas -kelas berikut:
Salinan kode adalah sebagai berikut:
C:/jackson_workspace> javac jacksontester.java
Sekarang jalankan Jacksontester dan lihat hasilnya sebagai berikut:
Salinan kode adalah sebagai berikut:
C:/Jackson_Workspace> Java Jacksontester
Verifikasi output
Mahesh Kumar21False [100, 90, 85]