คำนำ
JSON เป็นตัวย่อของสัญกรณ์ JavaScript Object ซึ่งเป็นรูปแบบการแลกเปลี่ยนข้อมูลที่มีน้ำหนักเบาทางเลือกแทน XML และมีขนาดเล็กกว่าเร็วกว่าและง่ายกว่าที่จะแยกวิเคราะห์มากกว่า XML เนื่องจาก JSON ใช้ไวยากรณ์ JavaScript เมื่ออธิบายวัตถุมันเป็นภาษาและแพลตฟอร์มที่ไม่ขึ้นกับแพลตฟอร์มและตัวแยกวิเคราะห์ JSON และไลบรารีชั้นเรียนจำนวนมากได้รับการพัฒนาในช่วงหลายปีที่ผ่านมา
JSON มีแบบฟอร์มต่อไปนี้:
วัตถุเป็นคอลเลกชันที่ไม่มีการเรียงลำดับของ "ชื่อ/ค่า 'คู่'" วัตถุเริ่มต้นด้วย "{" (Open Bracket) และจบลงด้วย "}" (ปิดตัวยึด) แต่ละ "ชื่อ" ตามด้วย ":" (ลำไส้ใหญ่); "'ชื่อ/ค่า' คู่" ถูกคั่นด้วย "," (เครื่องหมายจุลภาค)
รายการที่สั่งซื้อของค่า ในภาษาส่วนใหญ่มันถูกนำไปใช้เป็นอาร์เรย์, เวกเตอร์, รายการ, ลำดับ
เหล่านี้เป็นโครงสร้างข้อมูลทั่วไป ปัจจุบันภาษาการเขียนโปรแกรมส่วนใหญ่สนับสนุนพวกเขาในบางรูปแบบ สิ่งนี้ทำให้สามารถแลกเปลี่ยนข้อมูลในรูปแบบเดียวกันระหว่างภาษาการเขียนโปรแกรมต่างๆ
สำหรับการได้รับข้อมูลจาก URL ของเซิร์ฟเวอร์อื่น ๆ โดยทั่วไปเราจะส่งข้อมูล JSON ตัวอย่างเช่นเซิร์ฟเวอร์ B จำเป็นต้องได้รับข้อมูลเพจจาก URL ของเซิร์ฟเวอร์ A หลังจากได้รับอักขระ JSON หากสะดวกและรวดเร็วในการทำงานจะต้องแปลงเป็นวัตถุ Java ของคุณเอง
ที่นี่ฉันได้ลอง JSON ของบุคคลที่สามสามคนเพื่อแปลง Google GSON ดูเหมือนว่าจะไม่สามารถแปลงได้สำเร็จ มันยังคงรายงานข้อผิดพลาดรูปแบบ JSON แต่การตรวจสอบนั้นถูกต้องและความพยายามล้มเหลว ประเภทที่สองคือ net.sf.json ซึ่งหมายความว่าไม่มีการรายงานข้อผิดพลาด แต่ค่าของวัตถุจะว่างเปล่าเสมอ มีเพียง JSON-Simple เท่านั้นที่สามารถแปลงวัตถุได้สำเร็จ
แยกวิเคราะห์ JSON
ก่อนอื่นเราต้องแยกวิเคราะห์ JSON เพื่อดูว่า JSON เป็นรูปแบบ JSON มาตรฐานหรือไม่ เราสามารถดู JSON ในรูปแบบออนไลน์มากมายบนอินเทอร์เน็ต โดยทั่วไปเราเปลี่ยนซุปไม่ใช่ยาเมื่อแยกวิเคราะห์ JSON เป็นวัตถุ
ครั้งแรก: ฉันต้องรู้โครงสร้าง JSON ที่นี่ฉันจะเริ่มเซิร์ฟเวอร์ A และรับสตริงของข้อมูล JSON จาก URL
การโยนข้อมูลสำเนา JSON ลงในเครื่องมือการจัดรูปแบบสามารถดูโครงสร้างได้อย่างชัดเจน:
{"EventList": [{"id": 1030, "EventId": "1508779115818499700", "CreateTime": 1508779115000, "Endtime": 1508865480000, "EventContent": "123" "O4EWZ06XZHW6MC2GMZMYVDETX1ZK"}, {"ID": 1029, "EventId": "15083829072516660498", "CreateTime": 1508382906000, "OpenId": "O4EWZ06XZHW6MC2GMZMYVDETX1ZK"}, {"ID": 1028, "EventId": "1508308708414580378", "308308721000 "O4EWZ06XZHW6MC2GMZMYVDETX1ZK"}, {"ID": 1027, "EventId": "1508308463330664814", "CreateTime": 1508308480000, "O4EWZ06XZHW6MC2GMZMYVDETX1ZK"}, {"ID": 1026, "EventId": "1508308463017144213", "CreateTime": 1508308479000 "O4EWZ06XZHW6MC2GMZMYVDETX1ZK"}] "หน้า": "1", "ขนาด": "5", "Ishaspage": "1"}ประการที่สอง: สร้างคลาสเอนทิตีที่สอดคล้องกันตามโครงสร้าง
นำเข้า com.yhn.consumer.entity.event; นำเข้า lombok.data; นำเข้า org.json.simple.jsonobject; นำเข้า java.io.serializable; นำเข้า java.util.list; @datapublic Class Eventvo ดำเนินการ {รายการส่วนตัว หน้าสตริงส่วนตัว ขนาดสตริงส่วนตัว สตริงส่วนตัว ishaspage; Public EventVo (วัตถุ JSONObject) {// เมธอดตัวสร้างกำหนดค่าให้กับ Object EventList = (รายการ <cent>) Object.get ("EventList"); page = (string) object.get ("หน้า"); size = (string) object.get ("size"); ishaspage = (string) object.get ("ishaspage"); - เนื่องจากเป็นโครงสร้างแบบฝังตัวต่อไปนี้เป็นคลาสเหตุการณ์ใน private List<Event> eventList ;
นำเข้า lombok.data; นำเข้า org.hibernate.annotations.dynamicupdate; นำเข้า Javax.persistence.entity; นำเข้า Javax.persistence.generatedValue; นำเข้า Javax.persistence.id; นำเข้า java.io.serializable; serializable {// นี่คือเหตุการณ์ในรายการใน EventVo @ID @GeneratedValue ID จำนวนเต็มส่วนตัว; // ฟังก์ชั่นการเรียงลำดับสตริงส่วนตัว EventId; // Event ID วันที่ส่วนตัว CreateTime; // เวลาสร้างวันที่สิ้นสุดเวลาส่วนตัว; // อัปเดตเวลาส่วนตัวสตริง eventcontent; // เตือนเนื้อหาเหตุการณ์สตริงส่วนตัว OpenID; // รหัสผู้ใช้} ชั้นเรียนทดสอบ
ถัดไปโครงสร้างจะถูกเขียนด้วย คุณจะเขียนการทดสอบหน่วยบนเซิร์ฟเวอร์ B เพื่อดูว่าสามารถกำหนดค่าได้สำเร็จหรือไม่
@Test โมฆะสาธารณะ clientDemo () พ่นข้อยกเว้น {StringBuilder JSON = new StringBuilder (); url urlobject = url ใหม่ ("http://127.0.0.1/meetingsign/test/server?openid=o4EWZ06XZHW6MC2GMZMYVDETX1ZK&page=2&Size=5"); // ระบุ url httpurlconnection uc = (httpurlconnection) urlobject .OpenConnection (); // เปิดใช้งานการเชื่อมต่อ bufferedReader ใน = ใหม่ bufferedReader (ใหม่ inputStreamReader (uC.GetInputStream (), "UTF-8")); สตริงอินพุต = null; ในขณะที่ ((inputline = in.readline ())! = null) {json.append (อินพุตไลน์); // แยก json} in.close (); UC.Disconnect (); System.out.println (JSON); // ดูว่าคุณได้รับหรือไม่ // ลบ UTF-8 ที่เป็นไปได้ ฯลฯ เพราะอาจมีไฟล์ส่วนหัว BOM String result = formatString (json.toString ()); JSONPARSER PARSER = New JSONPARSER (); org.json.simple.jsonobject data = new org.json.simple.jsonobject (); data = (org.json.simple.jsonobject) parser.parse (ผลลัพธ์); EventVo EventVo = ใหม่ EventVo (ข้อมูล); // ส่งค่าลงใน log.info ("EventVo = {}", EventVo); }/*** ลบส่วนหัวระเบิด*/รูปแบบสตริงคงที่สาธารณะ (สตริง s) {ถ้า (s! = null) {s = s.replaceall ("/ufeff", ""); } return s; - ผลการทดสอบ
มันได้รับการกำหนดค่าให้กับวัตถุ
สรุป
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่าเนื้อหาของบทความนี้จะมีค่าอ้างอิงบางอย่างสำหรับการศึกษาหรือที่ทำงานของทุกคน หากคุณมีคำถามใด ๆ คุณสามารถฝากข้อความไว้เพื่อสื่อสาร ขอบคุณสำหรับการสนับสนุน Wulin.com