عكس سلاسل JSON وكائنات Java [JSON-LIB]
أثناء عملية التطوير ، غالبًا ما تحتاج إلى تبادل البيانات مع أنظمة أخرى. تشمل تنسيقات تبادل البيانات XML ، JSON ، إلخ. JSON ، كتنسيق بيانات خفيف الوزن ، أكثر كفاءة من XML. يتطلب XML الكثير من العلامات ، والتي تحتل بلا شك حركة مرور الشبكة. يقوم JSON بعمل جيد في هذا الصدد. دعونا نلقي نظرة على شكل JSON.
يمكن أن يكون لدى JSON تنسيقان ، أحدهما هو تنسيق كائن ، والآخر هو كائن الصفيف.
{"name": "json" ، "address": "Xicheng District ، Beijing" ، "Age: [{"name": "json" ، "address": "Xicheng District ، Beijing" ، "Age": 25}]من التنسيقين أعلاه ، يمكننا أن نرى أن الفرق الوحيد بين تنسيق الكائن وتنسيق كائن الصفيف هو أنه [] يضاف إلى تنسيق الكائن. ثم انظر إلى الهيكل المحدد. يمكن ملاحظة أن كلاهما يظهران في شكل أزواج القيمة الرئيسية ، مفصولة بفواصل (،) في الحالة الإنجليزية.
هذا التنسيق يحظى بشعبية كبيرة أيضًا عند تنفيذ نقل البيانات في الواجهة الأمامية والخلفية. تُرجع الواجهة الخلفية سلسلة بتنسيق JSON. يستخدم الواجهة الأمامية طريقة json.parse () في JS لتحليل سلسلة JSON في كائن JSON ، ثم اجتياز لاستخدام الواجهة الأمامية.
دعنا نصل إلى الموضوع ونقدم التحويل المتبادل بين كائنات JSON و Java في Java.
لتحقيق النقل المتبادل بين كائنات JSON و Java ، تحتاج إلى استخدام حزمة جرة طرف ثالث. يتم استخدام حزمة JSON-LIB هنا. عنوان التنزيل هو: https://sourceforge.net/projects/json-lib/. يتطلب JSON-LIB دعم خمس حزم: Commons-Beleutils-1.8.0.Jar ، Commons-Collections-33.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 العادي إلى حبة Java في Java ، أي فئة كيان ، مثل
Package com.cn.study.day3 ؛ طالب الفئة العامة {// اسم اسم السلسلة الخاصة ؛ // العمر enter age age ؛ // العنوان عنوان السلسلة الخاصة ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } السلسلة العامة getage () {عودة العائد ؛ } public void setage (string age) {this.age = age ؛ } السلسلة العامة getAddress () {return address ؛ } public void setAddress (عنوان السلسلة) {this.address = العنوان ؛ } Override public string toString () {return "student [name =" + name + "، Age =" + Age + "، address =" + address + "]" ؛ }}أعلاه عبارة عن فئة طبيعية لي كيان جافا ، انظر كيف يحولها JSON-LIB إلى نموذج سلسلة ،
public static void convertObject () {student stu = new student () ؛ stu.setname ("json") ؛ Stu.Setage ("23") ؛ Stu.SetAddress ("Beijing Xicheng District") ؛ // 1. استخدم JSonObject JSonObject JSON = jSonObject.fromObject (STU) ؛ // 2. استخدم jsonarray jsonarray array = jsonarray.fromobject (STU) ؛ String strjson = json.toString () ؛ String strarray = array.toString () ؛ System.out.println ("Strjson:"+Strjson) ؛ System.out.println ("Strarray:"+Strarray) ؛ }لقد حددت فصل كيان الطالب ، ثم حولته إلى سلاسل JSON باستخدام JSONOBJECT و JSONARRAY على التوالي. دعونا نرى النتيجة المطبوعة أدناه.
Strjson: {"العنوان": "منطقة Xicheng ، بكين" ، "العمر": "23" ، "الاسم": "json"من النتائج ، يمكننا أن نرى أن كلتا الطريقتين يمكنها تحويل كائنات Java إلى سلاسل JSON ، ولكن الهيكل المحول مختلف.
سلسلة JSON-》》 جافا كائن
ما سبق يشرح كيفية تحويل كائنات Java إلى سلاسل JSON. دعونا نرى كيفية تحويل تنسيق سلسلة JSON إلى كائنات Java.
أولاً ، تحتاج إلى تحديد سلسلتين بتنسيقات مختلفة ، تحتاج إلى استخدام/الهروب من عروض أسعار مزدوجة.
الفراغ الثابت العام jsonstrtojava () {// تحديد سلسلتين في تنسيقات مختلفة string objectstr = "{/" name/":/" json/"،/" Age/":/" 24/"،/" address/":/" xicheng district ، beijing/"}" ؛ String arraystr = "[{/" name/":/" json/"،/" Age/":/" 24/"،/" address/":/" Xicheng District ، Beijing/"}]" ؛ // 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 ، student.class) ؛ System.out.println ("Stu:"+Stu) ؛ System.out.println ("STU2:"+STU2) ؛ }نتيجة الطباعة هي:
STU: الطالب [name = json ، age = 24 ، address = Xicheng District ، Beijing] Stu2: student [name = JSON ، Age = 24 ، address = Xicheng District ، Beijing]
كما يتضح من الكود أعلاه ، يمكن أن يؤدي استخدام jsonobject بسهولة تحويل سلاسل تنسيق JSON إلى كائنات Java ، ولكن استخدام Jsonarray ليس بهذه السهولة ، لأنه يحتوي على رمز "[]" ، لذلك بعد أن نحصل على كائن Jsonarray ، نأخذ العنصر الأول ، وهو تشوه الطالب الذي نحتاجه ، ثم نستخدم JsonoBject بسهولة.
2. نقل القائمة وسلاسل JSON
قائمة-》》 json سلسلة
قائمة الفراغ الثابتة العامة ttojson () {student stu = new student () ؛ stu.setname ("json") ؛ Stu.Setage ("23") ؛ Stu.SetAddress ("Beijing Haidian District") ؛ قائمة <Student> siles = 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 للرد. دعونا نلقي نظرة على النتائج قبل التعليق.
استثناء في الموضوع "الرئيسي" net.sf.json.jsonexception: "الكائن" هو صفيف. استخدم jsonarray بدلا من ذلك
قل لي أن هناك استثناء. من خلال التحقق من رمز المصدر ، وجدت أنه عند استخدام طريقة FromObject ، سأحكم أولاً على نوع المعلمة. أخبرنا هنا أن المعلمة التي تم تمريرها هي نوع صفيف لأنه يتم استخدام قائمة ArrayList. دعونا نلقي نظرة على النتيجة بعد التعليق.
ListArray: [{"address": "Haidian District ، Beijing" ، "Age": "23" ، "Name": "Json"}] هذه النتيجة طبيعية.
سلسلة JSON-》》 قائمة
من المثال أعلاه ، يمكننا أن نرى أنه لا يمكن تحويل كائن القائمة إلا إلى تنسيق كائن الصفيف. لذلك دعونا نلقي نظرة على التحويل من السلسلة إلى القائمة أدناه.
public static void jsontolist () {String arraystr = "[{/" name/":/" json/"،/" age/":/" 24/"،/" address/":/" beijing xicheng district/"}]" ؛ // تحويل إلى قائمة القائمة <Student> list2 = (قائمة <Tudtude>) jsonarray.toList (jsonarray.fromobject (ArrayStr) ، student.class) ؛ لـ (الطالب stu: list2) {system.out.println (stu) ؛ }. لـ (الطالب الطالب: ss) {system.out.println (student) ؛ }}طباعة النتيجة ،
الطالب [name = JSON ، AGE = 24 ، العنوان = منطقة Xicheng ، Beijing] الطالب [Name = JSON ، AGE = 24 ، العنوان = مقاطعة Xicheng ، بكين]
نظرًا لأن تنسيق السلسلة بالتنسيق مع "[]" ، يتم تحديد كائن JSONARRAY هنا ، والذي يحتوي على أساليب TOARRAY و TOLIST للاستخدام. يتم تحويل الأول إلى صفيف في جافا ، أو إلى قائمة في جافا. نظرًا لوجود فئة كيان هنا لتتوافق ، يتم تحديد نوع العام (الطالب. class) عند استخدامه ، بحيث يمكن الحصول على الكائن المحول.
3.
خريطة-》》 json سلسلة
public static void maptojson () {student stu = new student () ؛ stu.setname ("json") ؛ Stu.Setage ("23") ؛ Stu.SetAddress ("شنغهاي ، الصين") ؛ خريطة <string ، stu> map = new hashmap <string ، student> () ؛ map.put ("First" ، Stu) ؛ // 1. jsonobject jsonobject mapObject = jsonobject.fromObject (map) ؛ system.out.println ("mapObject"+mapObject.ToString ()) ؛ // 2. jsonarray jsonarray maparray = jsonarray.fromObject (MAP) ؛ system.out.println ("maparray:"+maparray.toString ()) ؛ }طباعة النتيجة ،
MapObject {"First": {"address": "Shanghai ،" Age ":" 23 "،" name ":" Json "}} maparray: [{" first ": {" address ":" Shanghai ، "Age:" 23 "،يتم طباعة نموذجين أعلاه.
سلسلة JSON-》》 خريطة
لا يمكن تحويل سلاسل JSON مباشرة إلى كائنات MAP. من أجل الحصول على القيمة المقابلة للمفاتيح في الخرائط ، هناك حاجة إلى طرق أخرى.
public static void jsontomap () {String strobject = "{/" first/": {/" address/":/" Shanghai ، China/"،/" Age/":/" 23/"،/" name/":/" json/"}}" ؛ // jsonobject jsonobject jsonobject = jsonobject.fromObject (strobject) ؛ خريطة الخريطة = new hashmap () ؛ map.put ("First" ، student.class) ؛ // يتم استخدام طريقة ToBean ، وثلاث معلمات مطلوبة لـ MyBean my = (mybean) jsonobject.tobean (jsonobject ، mybean.class ، map) ؛ System.out.println (my.getFirst ()) ؛ }طباعة النتيجة ،
الطالب [الاسم = JSON ، العمر = 23 ، العنوان = شنغهاي ، الصين]
فيما يلي رمز Mybean.
package com.cn.study.day4 ؛ import java.util.map ؛ import com.cn.study.day3.student ؛ public class mybean {private student first ؛ الطالب العام getFirst () {return first ؛ } public void setFirst (student first) {this.first = first ؛ }} باستخدام طريقة ToBean () ، يتم تمرير ثلاثة معلمات ، والكتاب الأول هو كائن JsonObject ، والثاني هو mybean.class ، والثالث هو كائن خريطة. من خلال MyBean ، يمكننا أن نعرف أنه يجب أن يكون هناك سمة أولى في هذا الفصل ، ونوعها هو الطالب ، الذي يتوافق مع أنواع المفتاح وأنواع القيمة في الخريطة ، أي نوع القيمة المقابلة لنوع المفتاح الأول.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.