1. Introdução
Há uma classe ObjectMapper em Jackson que é muito prática, usada para trocar objetos Java e JSON.
1.Java objeto para JSON [serialização JSON]
importar java.io.ioException; importar java.text.parseException; importar java.text.simpledateFormat; importar com.fasterxml.jackson.databind.objectmapper; classe pública Jacksondemo {public static void main (string [] args) lança parseexception, ioexception {user user = new user (); user.setName ("xiaomin"); user.setemail ("[email protected]"); user.setage (20); SimpledateFormat DateFormat = new SimpleDateFormat ("AAAA-MM-DD"); user.setBirthday (DateFormat.Parse ("1996-10-01")); /*** ObjectMapper é o núcleo das operações JSON, e todas as operações JSON de Jackson são implementadas no ObjectMapper. * O ObjectMapper possui vários métodos de serialização JSON, que podem salvar strings JSON em diferentes mídias, como arquivo, saída, etc. * writeValue (arquivo arg0, objeto arg1) converte o arg1 em uma sequência JSON e o salva no arquivo arg0. * WriteValue (outputStream arg0, objeto arg1) converte o arg1 em uma sequência JSON e a salva no fluxo de saída do ARG0. * WriteValueasbytes (Object arg0) converte o arg0 em uma sequência JSON e produz o resultado em uma matriz de bytes. * WriteValueasString (Object arg0) converte o arg0 em uma sequência JSON e produz o resultado em uma string. */ ObjectMapper Mapper = new ObjectMapper (); // classe de usuário para json // resultado de saída: {"name": "xiaomin", "idade": 20, "aniversário": 844099200000, "email": "[email protected]"} string json = mapper.writevalueasstring (usuário); System.out.println (JSON); // coleção java para json // resultado de saída: [{"name": "xiaomin", "idade": 20, "aniversário": 844099200000, "email": "[email protected]"}] list <suser> usuários = new ArrayList <suser> (); usuários.add (usuário); String jsonList = mapper.WriteValuEasString (usuários); System.out.println (jsonList); }}2.Json para Java Class [JSON Deserialization]
importar java.io.ioException; importar java.text.parseException; importar com.fasterxml.jackson.databind.objectmapper; classe pública Jacksondemo {public static void main (string [] args) lança parseexception, ioexception {string json = "{/"name/":/"xiaomin/",/"age/":20./"birthday/":844099200000./":2:/":...com/"xia/"xiaom/":844099200000,/" ã" / ** * O ObjectMapper suporta a deserialização do JSON de byte [], arquivo, inputStream, strings, etc. */ objectMapper mapper = new ObjectMapper (); Usuário do usuário = mapper.readValue (json, user.class); System.out.println (usuário); }}
2. Jackson suporta 3 métodos de uso:
1. Ligação de dados: o mais conveniente de usar.
(1) Ligação completa dos dados:
String final estática privada Model_binding = "{/" name/":/" name1/",/" type/": 1}"; public void fullDatabinding () lança exceção {objectMapper mapper = new objectMapper (); Model user = mapper.readValue (Model_binding, Model.class); // ReadValue para uma classe de entidade. System.out.println (user.getName ()); System.out.println (user.getType ()); }Classe modelo:
Modelo de classe estática privada {nome da string privada; Tipo privado int; public String getName () {Return Name; } public void setName (nome da string) {this.name = name; } public int getType () {return type; } public void setType (int tipo) {this.type = type; }}(2) Ligação de dados brutos:
/** 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 Exceção {objectMapper mapper = new ObjecjotMapper (); Hashmap map = mapper.readValue (model_binding, hashmap.class); // readValue para um tipo de dados primitivo. System.out.println (map.get ("nome")); System.out.println (map.get ("type")); }(3) ligação de dados genéricos:
String estática privada String genérica_binding = "{/" key1/": {/" name/":/" name2/",/" type/": 2},/" key2/": {/" name/":/" name3/",/" type/": 3}}"; public void genericDatabinding () lança exceção {objectMapper mapper = new objectMapper (); Hashmap <string, model> modelmap = mapper.readValue (genérico_binding, new TypeReference <hashmap <string, modelo >> () {}); // readValue em um paradigma. Modelo modelo = modelMap.get ("key2"); System.out.println (Model.getName ()); System.out.println (Model.getType ()); }2. Modelo de árvore: o mais flexível.
String final estática privada Tree_model_binding = "{/" TreeKey1/":/" TreeValue1/",/" TreeKey2/":/" TreeValue2/",/" Children/": [{/" ChildKey1/":/" Childkey1/"}]"; public void TreemodelBinding () lança Exceção {ObjectMapper Mapper = new ObjectMapper (); JsonNode rootNode = mapper.readTree (Tree_model_binding); // PATH e FUNHA FUNÇÃO O MESMO GET, mas quando o nó não pode ser encontrado, ele retorna o nó ausente em vez de nulo. String TreeKey2Value = rootnode.path ("TreeKey2"). GetTextValue (); // System.out.println ("TreeKey2Value:" + TreeKey2Value); JsonNode ChildrenNode = rootNode.Path ("crianças"); String ChildKey1Value = ChildrenNode.get (0) .Path ("ChildKey1"). GetTextValue (); System.out.println ("ChildKey1Value:"+ChildKey1Value); // Crie o nó raiz ObjectNode ROOT = mapper.createObjectNode (); // Crie Child Node1 ObjectNode Node1 = Mapper.CreateObjectNode (); node1.put ("NodeKey1", 1); node1.put ("NodeKey2", 2); // vincula o nó filho 1 root.put ("filho", node1); // ArrayNode ArrayNode = Mapper.CreateArrayNode (); Arraynode.add (node1); Arraynode.add (1); // Ligue o nó da matriz root.put ("ArrayNode", ArrayNode); // json lê o nó árvore jsonnode valuetoTreenode = mappper.valuetotree (árvore_model_binding); // vincular o nó json root.put ("valuetoTreenode", valuetoTreenode); // Ligue o objeto JSON JSONNODE BINDJSONNODE = MAPPPPER.readValue (genérico_binding, jsonnode.class); // Ligue o JSON ao objeto JSON Node. // vinte o nó json root.put ("bindjsonNode", bindjsonNode); System.out.println (mapper.WriteValuEasString (root)); } 3. API de streaming: Melhor desempenho.
Para programas com requisitos de alto desempenho, é recomendável usar a API de streaming. Caso contrário, usando outros métodos, seja para criar um jsongenerator ou um jsonparser, o JSONFactory é usado.
pacote com.jingshou.jackson; importar java.io.file; importar java.io.ioException; importar com.fasterxml.jackson.core.jsonEncoding; importar com.fasterxml.jackson.core.jsonFactory; importar com.fasterxml.jackson.core.jsongnerator; importar com.fasterxml.jackson.core.jsonparser; importar com.fasterxml.jackson.core.jsontoken; classe pública Jacksontest6 {public static void main (string [] args) lança ioexception {jsonfactory jfactory = new jsonFactory (); /*** Escreva no arquivo ***/JsonGenerator jgenerator = jfactory.createGenerator (novo arquivo ("c: //user.json"), jsonEncoding.utf8); jgenerator.WriteStarTObject (); // {jgenerator.writestringfield ("nome", "mkyong"); // "nome": "mkyong" jgenerator.writenumberfield ("idade", 29); // "Age": 29 Jgenerator.WriteFieldName ("Mensagens"); // "Mensagens": jgenerator.writerTartarray (); // [jgenerator.writestring ("msg 1"); // "msg 1" jgenerator.writestring ("msg 2"); // "msg 2" jgenerator.writestring ("msg 3"); // "msg 3" jgenerator.WriteEndArray (); //] jgenerator.WriteEndObject (); //} jgenerator.close (); /*** leia do arquivo ***/jsonparser jparser = jfactory.createParser (novo arquivo ("c: //user.json"); // loop até o token igual a "}" while (jparser.NextToken ()! if ("name" .equals (fieldname)) {// token atual é "nome", // mova -se para o próximo, que é "nome" do valor jparser.nextToken (); System.out.println (jparser.getText ()); // exibe mkyong} if ("idade" .equals (fieldname)) {// O token atual é "idade", // muda para o próximo, que é o "nome" do valor jparser.nextToken (); System.out.println (jparser.getIntValue ()); // Exibir 29} if ("mensagens" .equals (fieldname)) {jparser.nextToken (); // O token atual é "[", mover a seguir // as mensagens é matriz, loop até o token igual a "]" while (jparser.nextToken ()! = jsontoken.end_array) {// exibir msg1, msg2, msg3 system.out.println (jparser.getText (); }}} jparser.close (); }}