1. البدء
هناك فئة ObjectMapper في جاكسون عملية للغاية ، وتستخدم لتبادل كائنات Java و JSON.
1. جافا كائن إلى JSON [JSON Serialization]
استيراد java.io.ioException ؛ استيراد java.text.parseException ؛ استيراد java.text.simpledateformat ؛ استيراد com.fasterxml.jackson.databind.objectMapper ؛ الفئة العامة jacksondemo {public static void main (string [] args) يلقي ParseException ، ioException {user user = new user () ؛ user.setName ("xiaomin") ؛ user.setEmail ("[email protected]") ؛ user.setage (20) ؛ SimpledAteFormat DateFormat = new SimplEdateFormat ("Yyyy-MM-DD") ؛ user.setbirthday (dateFormat.Parse ("1996-10-01")) ؛ /*** ObjectMapper هو جوهر عمليات JSON ، ويتم تنفيذ جميع عمليات JSON من Jackson في ObjectMapper. * يحتوي ObjectMapper على طرق تسلسل JSON متعددة ، والتي يمكن أن تنقذ سلاسل JSON في وسائط مختلفة مثل الملف ، أو OutputStream ، وما إلى ذلك. * WriteValue (OutputStream Arg0 ، Object Arg1) يحول Arg1 إلى تسلسل JSON ويحفظه إلى دفق الإخراج Arg0. * writevalueasbytes (Object Arg0) يحول Arg0 إلى تسلسل JSON ويخرج النتيجة إلى صفيف بايت. * WriteValueasString (Object Arg0) يحول Arg0 إلى تسلسل JSON ويخرج النتيجة إلى سلسلة. */ ObjectMapper mapper = new ObjectMapper () ؛ // فئة المستخدم إلى JSON // النتيجة النتيجة: {"name": "Xiaomin" ، "Age": 20 ، "Birthday": 844099200000 ، "Email": "[email protected]"} String json = mapper.writevalueasstring (user) ؛ System.out.println (JSON) ؛ // مجموعة Java إلى JSON // النتيجة النتيجة: [{"name": "Xiaomin" ، "Age": 20 ، "Birthday": 844099200000 ، "Email": "[email protected]"}] List <Sether> users = new ArrayList <Seter> () ؛ user.add (user) ؛ String jsonlist = mapper.writevalueasString (المستخدمين) ؛ System.out.println (jsonlist) ؛ }}2. json لفئة Java [json deserialization]
استيراد java.io.ioException ؛ استيراد java.text.parseException ؛ استيراد com.fasterxml.jackson.databind.objectMapper ؛ الطبقة العامة jacksondemo {public static void main (string [] args) يلقي parseException ، ioException {String json = "{/"name/"://"xia commin/"،/"age/":20،/// resbirthday/":844099200000،/"email/":borityboint@sinawome. / ** * ObjectMapper يدعم json deserialization من byte [] ، ملف ، inputStream ، السلاسل ، إلخ. مستخدم المستخدم = mapper.readvalue (json ، user.class) ؛ System.out.println (user) ؛ }}
2. جاكسون يدعم 3 طرق الاستخدام:
1. ربط البيانات: الأكثر ملاءمة للاستخدام.
(1) ربط البيانات الكامل:
Static Final Final Model_binding = "{/" name/":/" name1/"،/" type/": 1}" ؛ public void pulldatabinding () يلقي الاستثناء {objectMapper mapper = new ObjectMapper () ؛ مستخدم النموذج = mapper.readvalue (model_binding ، model.class) ؛ // readvalue لفئة كيان. System.out.println (user.getName ()) ؛ System.out.println (user.getType ()) ؛ }فئة النموذج:
طراز فئة ثابتة خاصة {اسم السلسلة الخاصة ؛ نوع int الخاص ؛ السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } public int gettype () {return type ؛ } public void setType (int type) {this.type = type ؛ }}(2) ربط البيانات الخام:
/ ** أنواع Java الخرسانية التي سيستخدمها Jackson لربط البيانات البسيط هي: نوع JSON نوع Java Object LinkedHashMap <String ، Object> Array ArrayList <Object> رقم سلسلة السلسلة (بدون جزء) صحيح ، فلاول طويل أو bigInteger (أصغر قابلاً للتطبيق). ObjectMapper mapper = new ObjectMapper () ؛ hashmap map = mapper.readvalue (model_binding ، hashmap.class) ؛ // readvalue إلى نوع بيانات بدائية. System.out.println (map.get ("name")) ؛ System.out.println (map.get ("type")) ؛ }(3) ربط البيانات العامة:
السلسلة النهائية الثابتة الخاصة generic_binding = "{/" key1/": {/" name/":/" name2/"،/" type/": 2} ،/" key2/": {/" name/":/" name3/"،/" type/": 3}}" ؛ public void genericDatabinding () يلقي الاستثناء {ObjectMapper mapper = new ObjectMapper () ؛ hashmap <string ، model> modelmap = mapper.readvalue (generic_binding ، new typereference <hashmap <string ، model >> () {}) ؛ // readValue في بيانات نموذج. نموذج النموذج = modelMap.get ("key2") ؛ system.out.println (model.getName ()) ؛ system.out.println (model.gettype ()) ؛ }2. نموذج شجرة: الأكثر مرونة.
Static Final String tree_model_binding = "{/" TreeKey1/":/" TreeValue1/"،/" TreeKey2/":/" TreeValue2/"،/" Kids/": [{/" childkey1/":/" childkey1/"}]}" ؛ public void treemodelbinding () يلقي الاستثناء {ObjectMapper mapper = new ObjectMapper () ؛ jsonnode rootnode = mapper.readtree (tree_model_binding) ؛ // PATH والحصول على وظيفة مثل GET ، ولكن عندما لا يمكن العثور على العقدة ، فإنها تُرجع العقدة المفقودة بدلاً من NULL. String TreeKey2Value = rootnode.path ("TreeKey2"). getTextValue () ؛ // system.out.println ("TreeKey2Value:" + TreeKey2Value) ؛ jsonnode kndringnode = rootnode.path ("الأطفال") ؛ String ChildKey1value = chirldnode.get (0) .Path ("childkey1"). getTextValue () ؛ System.out.println ("childkey1value:"+ChildKey1Value) ؛ // قم بإنشاء جذر Node ObjectNode = mapper.createObjectNode () ؛ // إنشاء node1 nodenode node1 = mapper.createObjectNode () ؛ node1.put ("nodekey1" ، 1) ؛ node1.put ("nodekey2" ، 2) ؛ // ربط عقدة الطفل 1 root.put ("الطفل" ، node1) ؛ // arraynode arraynode = mapper.createarraynode () ؛ arraynode.add (node1) ؛ arraynode.add (1) ؛ // ربط rout.put roun.put ("arraynode" ، arraynode) ؛ // json يقرأ عقدة الشجرة jsonnode valuetotreenode = mapper.valuetotree (tree_model_binding) ؛ // ربط json node root.put ("valuetotreenode" ، valuetotreenode) ؛ // ربط كائن عقدة json jsonnode bindjsonnode = mapper.readvalue (generic_binding ، jsonnode.class) ؛ // ربط كائن عقدة JSON. // BIND JSON NODE ROOT.PUT ("bindjsonnode" ، bindjsonnode) ؛ system.out.println (mapper.writevalueasString (root)) ؛ } 3. دفق واجهة برمجة التطبيقات: أفضل أداء.
بالنسبة للبرامج ذات المتطلبات العالية الأداء ، يوصى باستخدام واجهة برمجة تطبيقات البث. خلاف ذلك ، باستخدام طرق أخرى ، سواء كان ذلك لإنشاء JSongenerator أو Jsonparser ، يتم استخدام Jsonfactory.
حزمة com.jingshou.jackson ؛ استيراد java.io.file ؛ استيراد java.io.ioException ؛ استيراد com.fasterxml.jackson.core.jsonencoding ؛ استيراد com.fasterxml.jackson.core.jsonfactory ؛ استيراد com.fasterxml.jackson.core.jsongenerator ؛ استيراد com.fasterxml.jackson.core.jsonparser ؛ استيراد com.fasterxml.jackson.core.jsontoken ؛ الفئة العامة jacksontest6 {public static void main (string [] args) يلقي ioException {jsonfactory jfactory = new jsonfactory () ؛ /*** اكتب إلى ملف ***/jsongenerator jgenerator = jfactory.creategenerator (ملف جديد ("c: //user.json") ، jsonencoding.utf8) ؛ jgenerator.writestartobject () ؛ // {jgenerator.writestringfield ("name" ، "mkyong") ؛ // "name": "mkyong" jgenerator.writenumberfield ("Age" ، 29) ؛ // "Age": 29 JGenerator.WriteFieldName ("Messages") ؛ // "الرسائل": jgenerator.writestartarray () ؛ // [jGenerator.WriteString ("msg 1") ؛ // "msg 1" jgenerator.writeString ("msg 2") ؛ // "msg 2" jgenerator.writeString ("msg 3") ؛ // "msg 3" jgenerator.writeendarray () ؛ //] jgenerator.writeEndObject () ؛ //} jgenerator.close () ؛ /*** اقرأ من ملف ***/jsonparser jparser = jfactory.createparser (ملف جديد ("c: //user.json")) ؛ // loop حتى الرمز المميز يساوي "}" بينما (jParser.nextToken ()! = jsontoken.end_object) {String fieldName = jParser.getCurrentName () ؛ if ("name" .equals (fieldName)) {// الرمز المميز الحالي هو "name" ، // الانتقال إلى التالي ، وهو "name" jparser.nexttoken () ؛ System.out.println (jParser.getText ()) ؛ // عرض mkyong} if ("Age" .equals (fieldName)) {// الرمز المميز الحالي هو "Age" ، // الانتقال إلى التالي ، وهو "name" jparser.nexttoken () ؛ System.out.println (jParser.getIntValue ()) ؛ // عرض 29} if ("الرسائل" .equals (fieldName)) {jParser.nextToken () ؛ // الرمز المميز الحالي هو "[" ، نقل الرسائل // هي صفيف ، حلقة حتى الرمز المميز يساوي "]" بينما (jParser.nextToken ()! = jsontoken.end_array) {// display msg1 ، msg2 ، msg3 system.out.println (jparser.gettext ()) ؛ }}} jparser.close () ؛ }}