GSON, ห้องสมุด Java Class สามารถแปลงวัตถุ Java เป็น JSON หรือแปลงสตริง JSON เป็นวัตถุ Java ที่เท่ากัน GSON รองรับวัตถุ Java ที่ซับซ้อนโดยพลการรวมถึงวัตถุที่ไม่มีซอร์สโค้ด
ห้องสมุดการแยกวิเคราะห์ JSON อื่น ๆ ได้แก่ JSON-LIB; แจ็คสัน; com.alibaba.fastjson
ฉันยังคงชอบ gson ของ Google
1. ใช้สถานการณ์:
การแปลงวัตถุ Java และสตริง JSON; เอาต์พุตบันทึก
ตัวอย่างเช่น:
logger logger = logger.getLogger (CommonAction.class); gson g = new gson (); logger.info ("return:"+g.tojson (แผนที่)); 2. ตัวอย่างการใช้งาน:
1. การใช้งานขั้นพื้นฐาน TOJSON
เมธอด tojason () แปลงวัตถุเป็นสตริง JSON
GSON GSON = new gson (); รายการบุคคล = new ArrayList (); string str = gson.tojson (บุคคล);
2. การใช้งานขั้นพื้นฐาน: fromjson ()
GSON จัดเตรียมวิธีการ FARMJSON () เพื่อใช้วิธีการแปลงจากสตริง JSON เป็นเอนทิตี Java
ตัวอย่างเช่นสตริง JSON คือ:
[{"ชื่อ": "name0", "อายุ": 0}] แต่:
บุคคล = gson.fromjson (str, person.class);
ระบุพารามิเตอร์สองตัวคือสตริง JSON และประเภทของวัตถุที่ต้องแปลง
3. หลีกเลี่ยง Unicode Escape
ตัวอย่างเช่น: {"s": "/u003c"} ฉันแค่ต้องการพิมพ์แบบนี้ {"s": "<" <"} โซลูชัน: ฉันแค่ต้องปิดใช้งาน HTML Escaping GSON GSON = ใหม่
gsonBuilder (). disablehtmlescaping (). สร้าง ();
4. ไม่รวมฟิลด์บางอย่าง
หากคลาส A มีฟิลด์ฟิลด์ 1 และคลาสแม่ยังมีฟิลด์ฟิลด์ 1 ดังนั้นเมื่อวัตถุไปยัง JSON ประกาศฟิลด์ JSON หลายฟิลด์ชื่อ Field1 จะเกิดขึ้น การแก้ปัญหา 1: ลบฟิลด์ Field Filed1 ในคลาส A. โซลูชัน 2: ใช้คำอธิบายประกอบ @Expose ของ JSON เพื่อเพิ่มฟิลด์ Filed1 เพื่อพิมพ์ในคลาส A Messagetext @Expose จากนั้น Field1 โดยไม่มีคำอธิบายประกอบในคลาสหลักจะถูกแยกออก
GSON G = new GsonBuilder (). Excludefieldswithoutexposeannotation (). สร้าง ();
5. เปลี่ยนชื่อแอตทริบิวต์
3. ใช้ตัวอย่าง:
นำเข้า java.lang.reflect.type; นำเข้า java.sql.timestamp; นำเข้า java.text.dateformat; นำเข้า java.text.simpledateFormat; นำเข้า java.util.arraylist; นำเข้า java.util.date; com.google.gson.gsonbuilder; นำเข้า com.google.gson.jsondeserializationContext; นำเข้า com.google.gson.jsondeserializer; นำเข้า com.google.gson.jsonelement; นำเข้า com.google.gson.jsonparseexception; com.google.gson.jonserializationContext; นำเข้า com.google.gson.jonserializer; นำเข้า com.google.gson.reflect.typetoken; ชั้นเรียนสาธารณะ // ตั้งค่าการแปลงรูปแบบของคุณสมบัติของ Type GSON GSON = ใหม่ gsonBuilder (). registertypeadapter (timestamp.class, timestamptypeadapter ใหม่ ()). setDateFormat ("yyyy-mm-dd hh: mm: ss"). สร้าง (); รายการ <person> person = new ArrayList <Person> (); สำหรับ (int i = 0; i <10; i ++) {บุคคล p = คนใหม่ (); P.SetName ("ชื่อ" + i); P.Setage (i * 5); P.SetInsertTime (Timestamp ใหม่ (System.currentTimeMillis ())); PERSONS.ADD (P); } string str = gson.tojson (บุคคล); System.out.println (str); รายการ <person> ps = gson.fromjson (str, typetoken ใหม่ <list <list <person> () {}. getType ()); สำหรับ (int i = 0; i <ps.size (); i ++) {person p = ps.get (i); System.out.println (p.toString ()); } system.out.println (timestamp ใหม่ (System.currentTimeMillis ())); }} คลาสบุคคล {ชื่อสตริงส่วนตัว; อายุ int ส่วนตัว; การประทับเวลาส่วนตัว สตริงสาธารณะ getName () {ชื่อคืน; } โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; } public int getage () {return Age; } การตั้งค่าโมฆะสาธารณะ (อายุ int) {this.age = อายุ; } timestamp สาธารณะ getInsertTime () {return insertTime; } โมฆะสาธารณะ setInsertTime (timestamp insertTime) {this.InsertTime = insertTime; } @Override สตริงสาธารณะ toString () {return name + "/t" + age + "/t" + insertTime; }} // ใช้การทำให้เป็นอนุกรมและ deserialization interface คลาส timestamptypeadapter ใช้ jonserializer <timestamp>, jSondeserializer <Timestamp> {public JsonElement serialize HH: MM: SS: SS "); String DateFormatAsstring = format.format (วันที่ใหม่ (src.getTime ())); ส่งคืน JSONPRIMITITY ใหม่ (DateFormatAsstring); } timestamp สาธารณะ deserialize (jsonElement JSON, typeoft, jSondeserializationContext บริบท) พ่น jsonparseException {ถ้า (! (json instanceof jsonprimitive)) {โยน jsonparseException ใหม่ ("วันที่ควรเป็นค่าสตริง"); } ลอง {dateformat format = new SimpledateFormat ("yyyy-mm-dd hh: mm: ss: ss"); วันที่วันที่ = (วันที่) format.parse (json.getasstring ()); ส่งคืนการประทับเวลาใหม่ (date.getTime ()); } catch (exception e) {โยน jsonparseException ใหม่ (E); -