การพลิกกลับของสตริง JSON และ Java Objects [JSON-LIB]
ในระหว่างกระบวนการพัฒนาคุณมักจะต้องแลกเปลี่ยนข้อมูลกับระบบอื่น ๆ รูปแบบของการแลกเปลี่ยนข้อมูลรวมถึง 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; } public String getage () {return age; } การตั้งค่าโมฆะสาธารณะ (อายุสตริง) {this.age = อายุ; } สตริงสาธารณะ getAddress () {return address; } โมฆะสาธารณะ setAddress (ที่อยู่สตริง) {this.address = ที่อยู่; } @Override สตริงสาธารณะ toString () {return "นักเรียน [name =" + name + ", age =" + age + ", address =" + address + "]"; -ด้านบนเป็นคลาส Java เอนทิตีปกติของฉันดูว่า JSON-LIB แปลงเป็นรูปแบบสตริงได้อย่างไร
โมฆะคงที่สาธารณะ ConvertObject () {นักเรียน stu = นักเรียนใหม่ (); stu.setName ("JSON"); Stu.setage ("23"); Stu.SetAddress ("ปักกิ่ง Xicheng District"); // 1. ใช้ jsonObject jsonObject json = jsonobject.fromobject (stu); // 2. ใช้ jsonarray jsonarray array = jsonarray.fromobject (stu); String strjson = json.toString (); strarray = array.toString (); System.out.println ("strjson:"+strjson); System.out.println ("Strarray:"+Strarray); -ฉันกำหนดชั้นเรียนเอนทิตีของนักเรียนแล้วแปลงเป็นสตริง 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/"}"; String arraystr = "[{/" ชื่อ/":/" json/",/" อายุ/":/" 24/",/" ที่อยู่/":/" เขต Xicheng, ปักกิ่ง/"}]"; // 1. ใช้ jsonObject jsonObject jsonObject = jsonObject.FromObject (ObjectStr); นักเรียน stu = (นักเรียน) jsonobject.tobean (jsonObject, student.class); // 2. ใช้ jsonarray jsonarray jsonarray = jsonarray.fromobject (arraystr); // รับองค์ประกอบแรกของวัตถุ JsonArray o = jsonArray.get (0); jsonObject jsonObject2 = jsonObject.FromObject (O); นักเรียน stu2 = (นักเรียน) jsonobject.tobean (jsonobject2, นักเรียน. คลาส); 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 District"); รายการ <student> list = new ArrayList <Tudent> (); lists.add (stu); // 1. ใช้ jsonObject // jsonObject listobject = jsonobject.fromobject (รายการ); // 2. ใช้ jsonarray jsonarray 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> list2 = (รายการ <student>) jsonarray.tolist (jsonarray.fromobject (arraystr), student.class); สำหรับ (นักเรียน stu: list2) {system.out.println (stu); } // แปลงเป็นนักเรียนอาเรย์ [] ss = (นักเรียน []) jsonarray.toarray (jsonarray.fromobject (arraystr), student.class); สำหรับ (นักเรียนนักเรียน: SS) {System.out.println (นักเรียน); -พิมพ์ผลลัพธ์
นักเรียน [ชื่อ = 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 ("เซี่ยงไฮ้, จีน"); แผนที่ <สตริง, stu> map = new hashmap <string, student> (); map.put ("First", Stu); // 1. jsonObject jsonObject mapObject = jsonObject.FromObject (แผนที่); System.out.println ("mapobject"+mapobject.toString ()); // 2. jsonArray jsonArray maparray = jsonarray.fromobject (แผนที่); System.out.println ("MapArray:"+MapArray.toString ()); -พิมพ์ผลลัพธ์
MapObject {"First": {"ที่อยู่": "Shanghai," Age ":" 23 "," Name ":" JSON "}} MapArray: [{" First ": {" ที่อยู่ ":" Shanghai, "อายุ": "23", "ชื่อ": "JSON"}}]พิมพ์สองรูปแบบด้านบน
สตริง JSON-》》 แผนที่
สตริง JSON ไม่สามารถแปลงเป็นวัตถุแผนที่ได้โดยตรง เพื่อให้ได้ค่าที่สอดคล้องกับคีย์ในแผนที่จำเป็นต้องใช้วิธีการอื่น
โมฆะคงที่สาธารณะ JONTOMAP () {String stroBject = "{/" First/": {/" ที่อยู่/":/" Shanghai, China/",/" อายุ/":/" 23/",/" ชื่อ/":/" JSON/"}}"; // jsonObject jsonObject jsonObject = jsonObject.FromObject (strobject); แผนที่แผนที่ = ใหม่ hashmap (); map.put ("First", student.class); // ใช้วิธีการ tobean และต้องใช้พารามิเตอร์สามตัวสำหรับ myBean my = (myBean) jsonObject.tobean (jsonObject, myBean.class, แผนที่); System.out.println (my.getfirst ()); -พิมพ์ผลลัพธ์
นักเรียน [ชื่อ = json, อายุ = 23, ที่อยู่ = เซี่ยงไฮ้, จีน]
ด้านล่างเป็นรหัสของ MyBean
แพ็คเกจ com.cn.study.day4; นำเข้า java.util.map; นำเข้า com.cn.study.day3.student; ชั้นเรียนสาธารณะ MyBean {นักเรียนเอกชนก่อน; นักศึกษาสาธารณะ getFirst () {return ก่อน; } โมฆะสาธารณะ setFirst (นักเรียนคนแรก) {this.first = ก่อน; - การใช้วิธี Tobean () มีพารามิเตอร์สามพารามิเตอร์ที่ผ่านมาเป็นครั้งแรกคือวัตถุ JsonObject ที่สองคือ myBean.class และที่สามคือวัตถุแผนที่ ผ่าน MyBean เราสามารถรู้ได้ว่าจะต้องมีแอตทริบิวต์แรกในชั้นเรียนนี้และประเภทของมันคือนักเรียนซึ่งสอดคล้องกับประเภทคีย์และค่าของค่าในแผนที่นั่นคือประเภทของค่าที่สอดคล้องกับประเภทคีย์แรก
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น