1. Erste Schritte
Es gibt eine Objektmapper -Klasse in Jackson, die sehr praktisch ist und Java -Objekte und JSON verwendet.
1.Java Objekt gegen JSON [JSON -Serialisierung]
importieren java.io.ioException; Java.text.ParseException importieren; Java.Text.SimpledateFormat importieren; import com.fasterxml.jackson.databind.objectmapper; öffentliche Klasse JackSondemo {public static void main (String [] args) löst ParseException aus, 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 ist der Kern von JSON -Operationen, und alle JSON -Operationen von Jackson werden in ObjectMapper implementiert. * ObjectMapper verfügt über mehrere JSON -Serialisierungsmethoden, mit denen JSON -Zeichenfolgen in verschiedenen Medien wie Datei, OutputStream usw. speichern können. * WriteValue (OutputStream Arg0, Object Arg1) konvertiert Arg1 in eine JSON -Sequenz und speichert sie dem Arg0 -Ausgangsstrom. * WriteValUeasBytes (Objekt arg0) konvertiert Arg0 in eine JSON -Sequenz und gibt das Ergebnis in ein Byte -Array aus. * WriteValueasString (Object arg0) wandelt Arg0 in eine JSON -Sequenz um und gibt das Ergebnis in eine Zeichenfolge aus. */ ObjectMapper mapper = new ObjectMapper (); // Benutzerklasse zu JSON // Ausgabeergebnis: {"Name": "Xiaomin", "Alter": 20, "Geburtstag": 844099200000, "E -Mail": "[email protected]"} String json = mapper.writeValuEaString (Benutzer); System.out.println (JSON); // Java -Sammlung zu JSON // Ausgabeergebnis: [{"Name": "Xiaomin", "Alter": 20, "Geburtstag": 844099200000, "E -Mail": "[email protected]"}] Liste <Unters> user> user> user> arraylist <Unter <user> (); users.Add (Benutzer); String jsonList = mapper.writeValueasString (Benutzer); System.out.println (JSONLIST); }}2.JSON an Java -Klasse [JSON Deserialization]
importieren java.io.ioException; Java.text.ParseException importieren; import com.fasterxml.jackson.databind.objectmapper; öffentliche Klasse JackSondemo {public static void main (String [] args) löst ParseException aus, ioException {String json = "{/"name/":/xiaomin/",/"age/":20,/"birthday/" / ** * ObjectMapper unterstützt JSON -Deserialisierung von Byte [], Datei, InputStream, Zeichenfolgen usw. */ ObjectMapper Mapper = new ObjectMapper (); User user = mapper.readValue (JSON, user.class); System.out.println (Benutzer); }}
2. Jackson unterstützt 3 Nutzungsmethoden:
1. Datenbindung: Die bequemste Verwendung.
(1) Vollständige Datenbindung:
private statische endgültige Zeichenfolge model_binding = "{/" name/":/" name1/",/" type/": 1}"; public void fulldatabinding () löst Ausnahme aus {ObjectMapper mapper = new ObjectMapper (); Model user = mapper.readValue (model_binding, model.class); // ReadValue zu einer Entitätsklasse. System.out.println (user.getName ()); System.out.println (user.gettType ()); }Modellklasse:
private statische Klassenmodell {privater String -Name; privater Int -Typ; public String getName () {return name; } public void setName (String -Name) {this.name = name; } public int gettType () {return type; } public void setType (int type) {this.type = type; }}(2) Rohdatenbindung:
/** Concrete Java types that Jackson will use for simple data binding are: JSON Type Java Type object LinkedHashMap<String,Object> array ArrayList<Object> string String number(no fraction) Integer, Long or BigInteger (smallest applicable) number(fraction) Double(configurable to use BigDecimal) true|false Boolean null null */ public void rawDataBinding() throws Exception{ ObjectMapper Mapper = new ObjectMapper (); HashMap map = mapper.readValue (model_binding, hashmap.class); // ReadValue zu einem primitiven Datentyp. System.out.println (map.get ("name")); System.out.println (map.get ("type")); }(3) Generische Datenbindung:
private statische endgültige Zeichenfolge generic_binding = "{/" key1/": {/" name/":/" name2/",/" type/": 2},/" key2/": {/" name/":/" name3/",/" type/": 3}}"; public void genericDatabinding () löst Ausnahme aus {ObjectMapper mapper = new ObjectMapper (); HashMap <String, Modell> modelmap = mapper.readValue (generic_binding, neue Typeeference <HashMap <String, Modell >> () {}); // ReadValue in eine Paradigmendaten. Modell modell = modelmap.get ("key2"); System.out.println (model.getName ()); System.out.println (model.gettType ()); }2. Baummodell: das flexibelste.
private statische endgültige String Tree_model_binding = "{/" Trekey1/":/" TreeValue1/",/" Trekey2/":/" TreeValue2/",/" Kinder/": [{/" kindkey1/":/" kindkey1/"}]}}"; public void treemodelbinding () löst Ausnahme aus {ObjectMapper mapper = new ObjectMapper (); Jsonnode rootNode = mapper.readtree (Tree_Model_binding); // Pfad und abrufen Funktion genauso wie GET, aber wenn der Knoten nicht gefunden werden kann, gibt er einen fehlenden Knoten anstelle von Null zurück. String treeKey2Value = rootNode.Path ("treekey2"). GetTextValue (); // system.out.println ("treekey2Value:" + treekey2Value); JSONNODE CHILDING NOTE = WOOTNODE.PATH ("Kinder"); String Childey1Value = kindesnode.get (0) .Path ("kindey1"). GetTextValue (); System.out.println ("kindey1Value:"+cindkey1Value); // Erstellen Sie den Root Node ObjectNode root = mapper.createObjectNode (); // Child Node1 ObjectNode node1 = mapper.createObjectNode (); node1.put ("nodekey1", 1); node1.put ("nodekey2", 2); // Kinderknoten 1 root.put ("child", node1); // ArrayNode ArrayNode = mapper.CreatearrayNode (); arrayNode.add (node1); ArrayNode.Add (1); // Binden Sie das Array -Knoten -Root.put ("ArrayNode", ArrayNode); // JSON liest den Baumknoten jsonnode valuetotreenode = mapper.valuetotree (Tree_Model_Binding); // Binden Sie den JSON -Knoten root.put ("ValueTotreenode", Valuetotreenode); // Binden Sie das JSON -Knoten -Objekt JSONNODE BINDJSONNODE = MAPPER.READVALUE (generic_binding, jsonnode.class); // Binden Sie das JSON -Knotenobjekt. // json node root.put ("bindjsonNode", BindjsonNode); System.out.println (mapper.writevalueasString (root)); } 3.. Streaming -API: Beste Leistung.
Für Programme mit hohen Leistungsanforderungen wird empfohlen, die Streaming -API zu verwenden. Andernfalls wird mit anderen Methoden verwendet, unabhängig davon, ob es sich um einen Jsongenerator oder einen JsonParser erstellt, JSONFACTORY.
Paket com.jinghou.jackson; Import Java.io.file; importieren java.io.ioException; import com.fasterxml.jackson.core.jsonencoding; import com.fasterxml.jackson.core.jsonfactory; import com.fasterxml.jackson.core.jsongenerator; import com.fasterxml.jackson.core.jsonParser; import com.fasterxml.jackson.core.jsontoken; public class JackSontest6 {public static void main (String [] args) löst ioException {jsonFactory jfactory = new JsonFactory () aus; /*** Schreiben Sie in Datei ***/jsongenerator jgenerator = jfactory.createGenerator (neue Datei ("c: //user.json"), jsonencoding.utf8); JGenerator.WritestartObject (); // {jgenerator.writestringfield ("Name", "Mkyong"); // "Name": "Mkyong" JGenerator.WriteNumberfield ("Age", 29); // "Alter": 29 JGenerator.WriteFieldName ("Nachrichten"); // "Nachrichten": 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 (); /*** aus der Datei lesen ***/jsonParser jparser = jfactory.CreateParser (neue Datei ("c: //user.json"); // Schleife bis zum Token gleich "}" while (jParser.NextToken ()! if ("name" .equals (fieldname)) {// aktuelles Token ist "Name", // Wechseln Sie zu dem nächsten, was "name" von JParser.NextToken () ist; System.out.println (jparser.getText ()); // mkyong} if ("age" .equals (fieldname)) {// aktuelles Token ist "Alter", // Wechseln Sie zum nächsten, was "name" 's Value jParser.NextToken () ist; System.out.println (jparser.getIntValue ()); // anzeigen 29} if ("message" .equals (fieldname)) {jparser.nextToken (); // aktuelles Token ist "[", move Next // Nachrichten ist Array, Schleifen, bis Token gleich "]" while (jparser.nextToken ()! }}} jparser.close (); }}