ในระหว่างกระบวนการพัฒนาคุณมักจะต้องแลกเปลี่ยนข้อมูลกับระบบอื่น ๆ รูปแบบของการแลกเปลี่ยนข้อมูลรวมถึง XML, JSON ฯลฯ JSON เป็นรูปแบบข้อมูลที่มีน้ำหนักเบาซึ่งมีประสิทธิภาพมากกว่า XML XML ต้องการแท็กจำนวนมากซึ่งไม่ต้องสงสัยเลยว่ามีการรับส่งข้อมูลเครือข่ายอย่างไม่ต้องสงสัย JSON ทำงานได้ดีในเรื่องนี้ มาดูรูปแบบของ JSON
JSON สามารถมีสองรูปแบบหนึ่งคือรูปแบบวัตถุและอีกรูปแบบหนึ่งคือวัตถุอาร์เรย์
{"ชื่อ": "JSON", "ที่อยู่": "เขต Xicheng, ปักกิ่ง", "อายุ": 25} // สตริงรูปแบบวัตถุของ JSON
[{"ชื่อ": "JSON", "ที่อยู่": "เขต Xicheng, ปักกิ่ง", "อายุ": 25}] // รูปแบบวัตถุข้อมูล
จากสองรูปแบบข้างต้นเราจะเห็นว่าความแตกต่างระหว่างรูปแบบวัตถุและรูปแบบวัตถุอาร์เรย์คือ [] ถูกเพิ่มเข้าไปในรูปแบบวัตถุ จากนั้นดูโครงสร้างเฉพาะ จะเห็นได้ว่าพวกเขาทั้งสองปรากฏในรูปแบบของคู่คีย์-ค่าคั่นด้วยเครื่องหมายจุลภาค (,) ในรัฐอังกฤษ
รูปแบบนี้ยังได้รับความนิยมอย่างมากเมื่อดำเนินการส่งข้อมูลในส่วนหน้าและแบ็คเอนด์ back-end ส่งคืนสตริงในรูปแบบ JSON front-end ใช้วิธี json.parse () ใน JS เพื่อแยกวิเคราะห์สตริง JSON เป็นวัตถุ JSON จากนั้นเดินทางไปยังส่วนหน้าเพื่อใช้
มาที่หัวข้อและแนะนำการแปลงร่วมกันระหว่างวัตถุ JSON และ Java ใน Java
ในการตระหนักถึงการถ่ายโอนร่วมกันระหว่างวัตถุ JSON และ Java คุณต้องใช้แพ็คเกจ Jar ของบุคคลที่สาม แพ็คเกจ JSON-LIB ใช้ที่นี่ ที่อยู่ดาวน์โหลดคือ: https://sourceforge.net/projects/json-lib/ JSON-LIB ต้องการการสนับสนุนห้าแพ็คเกจ: Commons-Beanutils-1.8.0.jar, Commons-Collections-3.2.1.jar, Commons-Lang-2.5.jar, Commons-Logging-1.1.Jar และ Ezmorph-1.0.6.jar คุณสามารถดาวน์โหลดได้จากอินเทอร์เน็ตด้วยตัวเอง ที่อยู่ดาวน์โหลดจะไม่ถูกโพสต์ที่นี่อีกต่อไป
JSON-LIB ให้บริการหลายคลาสที่สามารถทำฟังก์ชั่นนี้ให้เสร็จสมบูรณ์เช่น JSONObject, JSONARRAY จากชื่อของชั้นเรียนเราจะเห็นว่าการแปลง JSONObject ควรอยู่ในรูปแบบวัตถุในขณะที่ JsonArray ที่ถูกแปลงควรเป็นวัตถุอาร์เรย์ (เช่นแบบฟอร์ม [])
1. การถ่ายโอนร่วมกันของวัตถุธรรมดา Java และสตริง JSON
Java Object-》》 String
วัตถุ Java ปกติหมายถึงถั่วชวาใน Java นั่นคือคลาสเอนทิตีเช่น
แพ็คเกจ com.cn.study.day3; นักเรียนชั้นเรียนสาธารณะ {// ชื่อสตริงส่วนตัวชื่อ; // อายุสตริงส่วนตัวอายุ; // ที่อยู่ที่อยู่สตริงส่วนตัว; สตริงสาธารณะ getName () {ชื่อคืน;} โมฆะสาธารณะ setName (ชื่อสตริง) {this.name = name; ที่อยู่;} โมฆะสาธารณะ setAddress (ที่อยู่สตริง) {this.address = address;}@overridepublic String toString () {return "นักเรียน [name =" + name + ", age =" + age + ", address =" + ที่อยู่ + "]";}}}}ด้านบนเป็นคลาส Java เอนทิตีปกติของฉันดูว่า JSON-LIB แปลงเป็นรูปแบบสตริงได้อย่างไร
โมฆะคงที่สาธารณะ ConVertObject () {นักเรียน stu = นักเรียนใหม่ (); stu.setName ("JSON"); stu.setage ("23"); stu.setAddress ("Beijing Xicheng District"); // 1 ใช้ jsonObjectjsonObject json = jsonObject.fromObject (stu); // 2 ใช้ jsonArrayjsonarray array = jsonArray.FromObject (stu); string strjson = json.toString (); String strarray = array.toString (); System.out.println ("strjson:"+strjson); system.out.out.println (ฉันกำหนดชั้นเรียนเอนทิตีของนักเรียนแล้วแปลงเป็นสตริง JSON โดยใช้ JSONObject และ JSONARRAY ตามลำดับ มาดูผลลัพธ์ที่พิมพ์ลงด้านล่าง
strjson: {"ที่อยู่": "เขต Xicheng, ปักกิ่ง", "อายุ": "23", "ชื่อ": "JSON"}
Strarray: [{"ที่อยู่": "เขต Xicheng, ปักกิ่ง", "อายุ": "23", "ชื่อ": "JSON"}]
จากผลลัพธ์เราจะเห็นว่าทั้งสองวิธีสามารถแปลงวัตถุ Java เป็นสตริง JSON ได้ แต่โครงสร้างที่แปลงนั้นแตกต่างกัน
สตริง JSON-》》 》》 Java Object
ข้างต้นอธิบายวิธีการแปลงวัตถุ Java เป็นสตริง JSON มาดูวิธีการแปลงรูปแบบสตริง JSON เป็นวัตถุ Java
ก่อนอื่นคุณต้องกำหนดสองสตริงในรูปแบบที่แตกต่างกันคุณต้องใช้/หลบหนีคำพูดสองเท่า
โมฆะคงที่สาธารณะ JSonstrtoJava () {// กำหนดสองสตริงที่แตกต่างกันสตริง objectstr = "{/" ชื่อ/":/" json/",/" อายุ/":/" 24/",/" ที่อยู่/":/" เขต Xicheng, Beijing/"}"; arraystr = "[{/" ชื่อ/":/" json/",/" อายุ/":/" 24/",/" ที่อยู่/":/" ปักกิ่ง Xicheng District, ปักกิ่ง/"}]"; // 1 ใช้ jsonObjectJSonObject jsonObject = jsonObject.FromObject (ObjectStr); Student Stu = (นักเรียน) jsonObject.tobean (JsonObject, Student.class); // 2 ใช้ jsonArrayjsonarray jsonarray = jsonarray.fromobject (arraystr); // รับองค์ประกอบแรกของวัตถุ JsonArray o = jsonarray.get (0); jsonobject jsonObject2 = jsonobject.fromobject (o); stu2 = (นักเรียน) jsonobject.tobean (jsonobject Student.class); System.out.println ("Stu:"+stu); system.out.println ("stu2:"+stu2);}ผลการพิมพ์คือ:
Stu: นักเรียน [ชื่อ = json, อายุ = 24, ที่อยู่ = เขต Xicheng, ปักกิ่ง]
Stu2: นักเรียน [ชื่อ = JSON, อายุ = 24, ที่อยู่ = เขต Xicheng, ปักกิ่ง]
ดังที่เห็นได้จากรหัสด้านบนการใช้ JSONObject สามารถแปลงสตริงรูปแบบ JSON เป็นวัตถุ Java ได้อย่างง่ายดาย แต่การใช้ JSONARRAY นั้นไม่ใช่เรื่องง่ายเพราะมันมีสัญลักษณ์ "[]" ดังนั้นหลังจากที่เราได้รับวัตถุ JSONARRAY
2. การถ่ายโอนรายการและสตริง JSON
รายการ-》》 json String
โมฆะคงที่สาธารณะ listtojson () {นักเรียน stu = นักเรียนใหม่ (); stu.setName ("json"); stu.setage ("23"); stu.setaddress ("เขต Haidian Beijing"); รายการ <student> list = new ArrayList <นักเรียน> (); ใช้ jsonObject // jsonObject listobject = jsonobject.fromobject (รายการ); // 2 ใช้ jsonArrayjsonArray listarray = jsonArray.fromObject (รายการ); // system.out.println ("listobject:"+listobject.toString ()); system.out.println ("listarray:"+listarray.toString ();ฉันใช้ jsonObject เพื่อเดิมพัน ลองดูผลลัพธ์ก่อนความคิดเห็น
ข้อยกเว้นในเธรด "Main" net.sf.json.jsonxception: 'Object' เป็นอาร์เรย์ ใช้ jsonarray แทน
บอกฉันว่ามีข้อยกเว้น โดยการตรวจสอบซอร์สโค้ดฉันพบว่าเมื่อใช้วิธี FromObject ฉันจะตัดสินประเภทพารามิเตอร์ก่อน ที่นี่ฉันบอกเราว่าพารามิเตอร์ที่ผ่านเป็นประเภทอาร์เรย์เนื่องจากมีการใช้ ArrayList มาดูผลลัพธ์หลังจากความคิดเห็น
ListArray: [{"ที่อยู่": "Haidian District, Beijing", "Age": "23", "Name": "JSON"}]
ผลลัพธ์นี้เป็นเรื่องปกติ
สตริง JSON-》》 รายการ
จากตัวอย่างข้างต้นเราจะเห็นว่าวัตถุรายการสามารถแปลงเป็นรูปแบบของวัตถุอาร์เรย์เท่านั้น ลองดูที่การแปลงจากสตริงเป็นรายการด้านล่าง
โมฆะคงที่สาธารณะ JONTOLIST () {String arraystr = "[{/" ชื่อ/":/" JSON/",/" อายุ/":/" 24/",/" ที่อยู่/":/" Beijing Xicheng District/"}]" Student.class); สำหรับ (Student Stu: list2) {system.out.println (stu);} // แปลงเป็น array นักเรียน [] ss = (นักเรียน []) jsonarray.toarray (jsonarray.fromobject (arraystr), นักเรียน.พิมพ์ผลลัพธ์
นักเรียน [ชื่อ = json, อายุ = 24, ที่อยู่ = เขต Xicheng, ปักกิ่ง]
นักเรียน [ชื่อ = json, อายุ = 24, ที่อยู่ = เขต Xicheng, ปักกิ่ง]
เนื่องจากรูปแบบของสตริงอยู่ในรูปแบบด้วย "[]" วัตถุ JSONARRAY จึงถูกเลือกที่นี่ซึ่งมีวิธีการ toArray และ tolist สำหรับใช้ อดีตถูกแปลงเป็นอาร์เรย์ในชวาหรือเป็นรายการในชวา เนื่องจากมีคลาสเอนทิตีที่นี่เพื่อให้สอดคล้องกันประเภทของทั่วไป (student.class) จึงถูกระบุเมื่อใช้ดังนั้นจึงสามารถรับวัตถุที่แปลงได้
3. การแปลงแผนที่และ JSON
แผนที่-》》 json String
โมฆะสาธารณะคงที่ maptojson () {นักเรียน stu = นักเรียนใหม่ (); stu.setName ("json"); stu.setage ("23"); stu.setaddress ("Shanghai, China"); แผนที่ <String, stu> map = new hashmap <string, stress> () jsonObjectJSonObject mapObject = jsonObject.FromObject (MAP); System.out.println ("mapObject"+mapObject.toString ()); // 2 jsonArrayjsonArray mapArray = jsonArray.FromObject (แผนที่); System.out.println ("MapArray:"+MapArray.toString ());}พิมพ์ผลลัพธ์
MapObject {"First": {"ที่อยู่": "เซี่ยงไฮ้, จีน", "อายุ": "23", "ชื่อ": "JSON"}}
MapArray: [{"First": {"ที่อยู่": "เซี่ยงไฮ้, จีน", "อายุ": "23", "ชื่อ": "JSON"}}]
พิมพ์สองรูปแบบด้านบน
สตริง JSON-》》 แผนที่
สตริง JSON ไม่สามารถแปลงเป็นวัตถุแผนที่ได้โดยตรง เพื่อให้ได้ค่าที่สอดคล้องกับคีย์ในแผนที่จำเป็นต้องใช้วิธีการอื่น
โมฆะคงที่สาธารณะ JONTOMAP () {String stroBject = "{/" First/": {/" ที่อยู่/":/" Shanghai, China/",/" อายุ/":/" 23/",/" ชื่อ/":/" json/"}"; hashmap (); map.put ("แรก", student.class); // วิธีการใช้ tobean และจำเป็นต้องใช้พารามิเตอร์สามตัวสำหรับ myBean my = (myBean) jsonObject.tobean (jsonObject, myBean.class, map);พิมพ์ผลลัพธ์
นักเรียน [ชื่อ = json, อายุ = 23, ที่อยู่ = เซี่ยงไฮ้, จีน]
ด้านล่างเป็นรหัสของ MyBean
แพ็คเกจ com.cn.study.day4; นำเข้า java.util.map; นำเข้า com.cn.study.day3.student; ชั้นเรียนสาธารณะ mybean {นักเรียนเอกชนก่อน; นักเรียนสาธารณะ getfirst () {กลับมาก่อน;การใช้วิธี Tobean () มีพารามิเตอร์สามพารามิเตอร์ที่ผ่านมาเป็นครั้งแรกคือวัตถุ JsonObject ที่สองคือ myBean.class และที่สามคือวัตถุแผนที่ ผ่าน MyBean เราสามารถรู้ได้ว่าจะต้องมีแอตทริบิวต์แรกในชั้นเรียนนี้และประเภทของมันคือนักเรียนซึ่งสอดคล้องกับประเภทคีย์และค่าของค่าในแผนที่นั่นคือประเภทของค่าที่สอดคล้องกับประเภทคีย์แรก
ข้างต้นเป็นคำอธิบายโดยละเอียดของตัวอย่างการแปลงร่วมกันของสตริง JSON และวัตถุ Java ที่แนะนำโดยบรรณาธิการ ฉันหวังว่ามันจะเป็นประโยชน์กับคุณ!