1. Pour commencer
Il y a une classe ObjectMapper à Jackson qui est très pratique, utilisée pour échanger des objets Java et JSON.
1.Java Objet à JSON [Sérialisation JSON]
Importer java.io.ioException; import java.text.parseException; import java.text.simpledateFormat; import com.fasterxml.jackson.databind.objectmapper; classe publique jackSondeMo {public static void main (String [] args) lève 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 est le cœur des opérations JSON, et toutes les opérations JSON de Jackson sont implémentées dans ObjectMapper. * ObjectMapper a plusieurs méthodes de sérialisation JSON, qui peuvent enregistrer des chaînes JSON dans différents supports tels que Fichier, OutputStream, etc. * WriteValue (fichier arg0, objet Arg1) convertit Arg1 en une séquence JSON et l'enregistre en fichier arg0. * WriteValue (OutputStream Arg0, objet Arg1) convertit Arg1 en une séquence JSON et l'enregistre en flux de sortie Arg0. * WriteValueAsBytes (Object Arg0) convertit Arg0 en une séquence JSON et produit le résultat en un tableau d'octets. * WriteValueAsString (Object Arg0) convertit Arg0 en une séquence JSON et produit le résultat en une chaîne. * / ObjectMapper Mappen = new ObjectMapper (); // Classe utilisateur sur JSON // Résultat de sortie: {"Name": "Xiaomin", "Age": 20, "Birthday": 844099200000, "Email": "[email protected]"} String JSON = MAPER.WRITEVALUEEASSSTRING (User); System.out.println (JSON); // Collection Java à JSON // Sortie Résultat: [{"Name": "Xiaomin", "Age": 20, "Birthday": 844099200000, "Email": "[email protected]"}] Liste <Derser> Users = New ArrayList <User> (); users.add (utilisateur); String JSONList = mAper.WriteValueAsString (utilisateurs); System.out.println (JSONList); }}2.json à la classe Java [désérialisation JSON]
Importer java.io.ioException; import java.text.parseException; import com.fasterxml.jackson.databind.objectmapper; classe publique JackSondemo {public static void main (String [] args) lève ParseException, ioException {String JSON = "{/"name/":/"xiaomin/" ,/"age/":20 ,/"birthday/":844099200000 ,/"memail/":/"[email protected]/" ";; / ** * ObjectMapper prend en charge la désérialisation JSON à partir de Byte [], File, InputStream, Strings, etc. * / ObjectMapper Mapper = new ObjectMapper (); User user = mapper.readvalue (json, user.class); System.out.println (utilisateur); }}
2. Jackson prend en charge 3 méthodes d'utilisation:
1. Liaison des données: la plus pratique à utiliser.
(1) Liaison complète des données:
chaîne finale statique privée Model_binding = "{/" name / ": /" name1 / ", /" type / ": 1}"; public void fullDatabinding () lève une exception {objectMapper Mapper = new ObjectMapper (); Modèle User = MAPPER.readValue (Model_Binding, Model.Class); // ReadValue vers une classe d'entité. System.out.println (user.getName ()); System.out.println (user.getType ()); }Classe de modèle:
Modèle de classe statique privée {nom de chaîne privée; Type int privé; public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public int getType () {return type; } public void setType (int type) {this.type = type; }}(2) liaison des données brutes:
/ ** Types Java en béton que Jackson utilisera pour la liaison de données simples sont: JSON Type Java Type d'objet LinkedHashmap <String, Object> Array ArrayList <objet> numéro de chaîne (Fraction) Double (configurable pour utiliser BigDecimal) True | False Boolean Null Null * ObjectMapper Mappeur = new ObjectMapper (); Hashmap map = mapper.readvalue (Model_binding, hashmap.class); // readvalue à un type de données primitif. System.out.println (map.get ("name")); System.out.println (map.get ("type")); }(3) liaison générique des données:
chaîne finale statique privée generic_binding = "{/" key1 / ": {/" name / ": /" name2 / ", /" type / ": 2}, /" key2 / ": {/" name / ": /" name3 / ", /" type / ": 3}}"; public void genericDatabinding () lève une exception {objectMapper mapper = new ObjectMapper (); Hashmap <String, Model> ModelMap = MAPPER.READVALUE (Generic_Binding, New TypeReference <Hashmap <String, Model >> () {}); // ReadValue dans une données de paradigme. Modèle modèle = modèlemap.get ("key2"); System.out.println (Model.GetName ()); System.out.println (Model.getType ()); }2. Modèle d'arbre: le plus flexible.
chaîne finale statique privée Tree_Model_Binding = "{/" Treekey1 / ": /" TreeValue1 / ", /" Treekey2 / ": /" TreeValue2 / ", /" Enfants / ": [{/" ChildKey1 / ": /" ChildKey1 / "}]}"; public void TreemodelBinding () lève une exception {objectMapper Mapper = new ObjectMapper (); JSONNODE rootNode = MAPER.ReadTree (Tree_Model_Binding); // Chemin et obtenez la fonction de GET, mais lorsque le nœud ne peut être trouvé, il renvoie le nœud manquant au lieu de Null. String TreeKey2Value = rootNode.Path ("TreeKey2"). GetTextValue (); // System.out.println ("TreeKey2Value:" + TreeKey2Value); JSONNode ChildrenNode = rootNode.path ("enfants"); String ChildKey1Value = ChildrenNode.get (0) .Path ("ChildKey1"). GetTextValue (); System.out.println ("ChildKey1Value:" + ChildKey1Value); // Créez le nœud racine objectNode root = mAper.CreateObjectNode (); // Créer Child Node1 ObjectNode Node1 = MAPPER.CreateObjectNode (); Node1.put ("NodeKey1", 1); Node1.put ("NodeKey2", 2); // lier le nœud enfant 1 root.put ("enfant", node1); // arrayNode arrayNode = mAper.CreateArrayNode (); ArrayNode.Add (Node1); arrayNode.add (1); // lier le nœud de tableau root.put ("arrayNode", arrayNode); // JSON lit le nœud d'arbre JSONNODE VALUETOTREENODE = MAPTER.VALUETOTREE (Tree_Model_Binding); // lier le nœud JSON root.put ("ValuEtOtReenode", ValuEtOtReenode); // lie l'objet nœud json jsonNode bindjSonNode = mAper.readValue (generic_binding, jsonNode.class); // lie l'objet nœud JSON. // bind json node root.put ("bindjsonNode", bindjsonNode); System.out.println (Mapper.WriteValueAsString (root)); } 3. API Streaming: meilleures performances.
Pour les programmes avec des exigences de haute performance, il est recommandé d'utiliser l'API de streaming. Sinon, en utilisant d'autres méthodes, que ce soit pour créer un jsongenerator ou un jsonParser, JSONFactory est utilisé.
Package com.jingshou.jackson; Importer java.io.file; Importer 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; classe publique JackSonTest6 {public static void main (String [] args) lève ioException {jsonFactory jfactory = new JSONFactory (); / *** Écrivez dans le fichier *** / jsongenerator jGenerator = jfactory.createGenerator (nouveau fichier ("c: //user.json"), jsonencoding.utf8); jGenerator.WriteStartObject (); // {jGenerator.WriteStringfield ("Name", "Mkyong"); cette // "Age": 29 jGenerator.WriteFieldName ("Messages"); // "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 (); / *** Lire à partir du fichier *** / jsonParser jParser = jfactory.createParser (nouveau fichier ("c: //user.json")); // boucle jusqu'à ce que le jeton égal à "}" while (jParser.nextToken ()! = jSontoken.end_Object) {String fieldName = jParser.getCurrentName (); if ("name" .equals (fieldName)) {// Le jet de courant actuel est "nom", // se déplacer vers Suivant, qui est la valeur de "name" jparser.nextttoken (); System.out.println (jParser.GetText ()); // affiche mkyong} if ("Âge" .Equals (fieldName)) {// Le jet de courant est "Age", // Déplacer vers Suivant, qui est la valeur de "nom" jParser.NextToken (); System.out.println (jParser.getIntValue ()); // affiche 29} if ("messages" .equals (fieldname)) {jParser.NextToken (); // Le jeton actuel est "[", déplacer suivant // Les messages sont un tableau, boucle jusqu'à ce que le jeton égal à "]" while (jParser.NextToken ()! = jSontoken.end_Array) {// Afficher msg1, msg2, msg3 System.out.println (jParser.GetText ()); }}} jParser.close (); }}