สตรีมมิ่ง API อ่านและเขียนเหตุการณ์ที่ไม่ต่อเนื่องไปยังเนื้อหา JSON Jsonparser อ่านข้อมูลในขณะที่ Jsongenerator เขียนข้อมูล มันเป็นวิธีที่มีประสิทธิภาพที่สุดของทั้งสามโดยมีค่าใช้จ่ายต่ำสุดและการดำเนินการอ่าน/เขียนที่เร็วที่สุด มันคล้ายกับตัวแยกวิเคราะห์ Stax สำหรับ XML
ในบทความนี้เราจะแสดงวิธีการอ่านและเขียนข้อมูล JSON โดยใช้สตรีมมิ่ง API ของแจ็คสัน สตรีมมิ่ง APIs ทำงานโดยใช้ JSON สำหรับทุกรายละเอียดจะต้องจัดการด้วยความระมัดระวัง ตัวอย่างต่อไปนี้จะใช้สองคลาส:
คลาส JSongenerator - เขียนถึงสตริง JSON
Songenerator เป็นคลาสพื้นฐานที่กำหนดเนื้อหา JSON ที่เขียนโดย API สาธารณะ สร้างอินสแตนซ์โดยใช้วิธีโรงงานของอินสแตนซ์ JSONFACTORY
การประกาศในชั้นเรียนต่อไปนี้คือการประกาศของ org.codehaus.jackson.jsongenerator คลาส:
ระดับนามธรรมสาธารณะ JSongenerator ขยายวัตถุที่ใช้งานได้ปิด
ชั้นเรียนซ้อนกัน
| SN | ชั้นเรียนและคำอธิบาย |
|---|---|
| 1 | คลาสคงที่ jsongenerator.feature // การแจงนับกำหนดฟังก์ชั่น togglable ทั้งหมดของเครื่องกำเนิดไฟฟ้า |
ตัวสร้าง
| SN | ชั้นเรียนและคำอธิบาย |
|---|---|
| 1 | ตัวสร้างเริ่มต้น |
Jsonparser Class - Parses Json Strings
JSONPARSER เป็นคลาสพื้นฐานที่กำหนดเนื้อหา JSON ที่ใช้โดย API สาธารณะเพื่ออ่าน สร้างอินสแตนซ์โดยใช้วิธีโรงงานของอินสแตนซ์ JSONFACTORY
การประกาศในชั้นเรียนต่อไปนี้คือการประกาศของ org.codehaus.jackson.jsonparser คลาส:
Jsonparser ระดับนามธรรมสาธารณะขยายวัตถุที่ใช้งานได้
ชั้นเรียนซ้อนกัน
| SN | ชั้นเรียนและคำอธิบาย |
|---|---|
| 1 | คลาสคงที่ JSONPARSER.FEATURE // การแจงนับกำหนดฟังก์ชั่นการสลับที่สามารถใช้งานได้ทั้งหมดของตัวแยกวิเคราะห์ |
| 2 | คลาสคงที่ jsonparser.numbertype // การแจงนับสามารถใช้สำหรับประเภทของตัวเลข "ท้องถิ่น" (ดีที่สุด) ที่เป็นไปได้ |
ตัวสร้าง
| SN | ชั้นเรียนและคำอธิบาย |
|---|---|
| 1 | ป้องกัน jsonparser () // ตัวสร้างเริ่มต้น |
| 2 | Protected JsonParser (คุณสมบัติ int) |
วิธีการสืบทอดคลาสนี้สืบทอดวิธีการเรียนต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
java.lang.Object
เขียนถึง JSON โดยใช้ JSongenerator
การใช้ JSongenerator นั้นง่ายมาก ขั้นแรกให้ใช้เมธอด jsonfactory.createJSongenerator () เพื่อสร้าง jsongenerator และใช้วิธีการเขียน *** () เพื่อเขียนค่า JSON แต่ละค่า
jsonfactory jasonfactory = new jsonfactory (); jsongenerator jsongenerator = jasonfactory.createJSongenerator (ไฟล์ใหม่ ("student.json"), jsonencoding.utf8); // {jsongenerator.writestartobject (); Kumar "JSongenerator.writestringfield (" ชื่อ "," Mahesh Kumar ");ลองมาดูการดำเนินงานของ JSongenerator สร้างไฟล์คลาส Java ชื่อ JackSontester ใน Directory C:/> Jackson_Workspace
ไฟล์: JackSontester.java
นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า java.util.map นำเข้า org.codehaus.jackson.jsonencoding; นำเข้า org.codehaus.jackson.jsonfactory; นำเข้า org.codehaus.jackson.jsongenerator; org.codehaus.jackson.map.jsonmappingexception; นำเข้า org.codehaus.jackson.map.objectmapper; JackSontester ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก ลอง {jsonfactory jasonfactory = new jsonfactory (); JSongenerator JSongenerator = jasonfactory.createJSongenerator (ไฟล์ใหม่ ("student.json"), jsonencoding.utf8); // {JSongenerator.writestartObject (); // "ชื่อ": "Mahesh Kumar" JSongenerator.writestringfield ("ชื่อ", "Mahesh Kumar"); // "อายุ": 21 jsongenerator.writenumberfield ("อายุ", 21); // "ยืนยัน": เท็จ jsongenerator.writebooleanfield ("ตรวจสอบแล้ว", เท็จ); // "Marks": [100, 90, 85] jsongenerator.writefieldName ("เครื่องหมาย"); // [jsongenerator.writestartarray (); // 100, 90, 85 jsongenerator.writenumber (100); jsongenerator.writenumber (90); jsongenerator.writenumber (85); //] jsongenerator.writeendarray (); //} JSongenerator.writeEndObject (); jsongenerator.close (); // ผลลัพธ์ student.json // {// "ชื่อ": "Mahesh Kumar", // "อายุ": 21, // "ตรวจสอบ": false, // "เครื่องหมาย": [100,90,85] //} ObjectMapper Mapper = New ObjectMapper (); แผนที่ <สตริงวัตถุ> datamap = mapper.readValue (ไฟล์ใหม่ ("student.json"), map.class); System.out.println (datamap.get ("ชื่อ")); System.out.println (datamap.get ("อายุ")); System.out.println (datamap.get ("ตรวจสอบ")); System.out.println (datamap.get ("เครื่องหมาย")); } catch (jsonparseException e) {e.printstacktrace (); } catch (jsonMappingException e) {e.printStackTrace (); } catch (ioexception e) {e.printstacktrace (); -ผลการตรวจสอบ
ใช้ Javac เพื่อรวบรวมคลาสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
C:/jackson_workspace> javac jacksontester.java
ตอนนี้เรียกใช้ JackSontester เพื่อดูผลลัพธ์:
การคัดลอกรหัสมีดังนี้:
C:/Jackson_Workspace> Java JackSontester
ตรวจสอบผลลัพธ์
Mahesh Kumar21False [100, 90, 85]
อ่าน json โดยใช้ jsonparser
การใช้ JsonParser นั้นง่ายมาก ก่อนอื่นสร้าง jsonparser โดยใช้วิธี jsonfactory.createjsonparser () และใช้วิธี nexttoken () เพื่ออ่านแต่ละสตริง JSON เป็นแท็ก ตรวจสอบแต่ละโทเค็นและกระบวนการที่เกี่ยวข้อง
jsonfactory jasonfactory = new jsonfactory (); jjsonparser jsonparser = jasonfactory.createjsonparser (ไฟล์ใหม่ ("student.json")); ในขณะที่ (jsonparser.nexttoken ()! if ("name" .equals (fieldName)) {// ย้ายไปที่โทเค็นถัดไป jsonparser.nexttoken (); System.out.println (jsonparser.getText ()); -มาดูการดำเนินงานของ Jsonparser กันเถอะ สร้างคลาสชื่อ JackSontester ใน Java ใน Folder C:/> Jackson_Workspace
ไฟล์: JackSontester.java
นำเข้า java.io.file; นำเข้า java.io.ioexception; นำเข้า org.codehaus.jackson.jsonencoding; นำเข้า org.codehaus.jackson.jsonfactory; นำเข้า org.codehaus.jackson.jsongenerator; org.codehaus.jackson.jsonparser; นำเข้า org.codehaus.jackson.jsontoken; นำเข้า org.codehaus.jackson.map.jsonmappingexception; ลอง {jsonfactory jasonfactory = new jsonfactory (); JSongenerator JSongenerator = jasonfactory.createJSongenerator (ไฟล์ใหม่ ("student.json"), jsonencoding.utf8); jsongenerator.writestartobject (); jsongenerator.writestringfield ("ชื่อ", "Mahesh Kumar"); jsongenerator.writenumberfield ("อายุ", 21); jsongenerator.writebooleanfield ("ตรวจสอบ", เท็จ); jsongenerator.writefieldName ("Marks"); jsongenerator.writestartarray (); // [jsongenerator.writenumber (100); jsongenerator.writenumber (90); jsongenerator.writenumber (85); jsongenerator.writeendarray (); jsongenerator.writeEndObject (); jsongenerator.close (); // ผลลัพธ์ student.json // {// "ชื่อ": "Mahesh Kumar", // "อายุ": 21, // "ตรวจสอบ": false, // "เครื่องหมาย": [100,90,85] //} jsonparser jsonparser = jasonfactory.createjsonparser ในขณะที่ (jsonparser.nexttoken ()! = jSontoken.end_object) {// รับโทเค็นสตริงปัจจุบัน fieldName = jsonParser.getCurrentName (); if ("name" .equals (fieldName)) {// ย้ายไปที่โทเค็นถัดไป jsonparser.nexttoken (); System.out.println (jsonparser.getText ()); } if ("อายุ" .Equals (fieldName)) {// ย้ายไปที่โทเค็นถัดไป jsonparser.nexttoken (); System.out.println (jsonparser.getNumberValue ()); } if ("ตรวจสอบ" .equals (fieldName)) {// ย้ายไปที่โทเค็นถัดไป JsonParser.nexttoken (); System.out.println (jsonparser.getBooleanValue ()); } if ("เครื่องหมาย" .equals (fieldName)) {// ย้ายไปที่ [jsonparser.nexttoken (); // วนซ้ำจนถึงโทเค็นเท่ากับ "]" ในขณะที่ (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 (); -ผลการตรวจสอบ
คอมไพล์ใช้ Javac เพื่อรวบรวมคลาสต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
C:/jackson_workspace> javac jacksontester.java
ตอนนี้เรียกใช้ JackSontester และดูผลลัพธ์ดังนี้:
การคัดลอกรหัสมีดังนี้:
C:/Jackson_Workspace> Java JackSontester
ตรวจสอบผลลัพธ์
Mahesh Kumar21False [100, 90, 85]