Как преобразовать объект Java в / из JSON (Джексон)
В этом руководстве мы покажем вам, как использовать привязку данных Jackson 1.x для преобразования объекта Java в / из JSON.
Note
Jackson 1.x - это проект сопровождения, используйте вместо негоJackson 2.x.
Note
Это руководство устарело, никаких обновлений больше нет, обратитесь к последнемуJackson 2
tutorial – Object to / from JSON.
1. Краткий справочник
1.1 Convert Java object to JSON, writeValue(...)
ObjectMapper mapper = new ObjectMapper(); User user = new User(); //Object to JSON in file mapper.writeValue(new File("c:\\user.json"), user); //Object to JSON in String String jsonInString = mapper.writeValueAsString(user);
1.2 Convert JSON to Java object, readValue(...)
ObjectMapper mapper = new ObjectMapper(); String jsonInString = "{'name' : 'example'}"; //JSON from file to Object User user = mapper.readValue(new File("c:\\user.json"), User.class); //JSON from String to Object User user = mapper.readValue(jsonInString, User.class);
P.S All examples are tested with Jackson 1.9.13
2. Джексонская зависимость
Для Jackson 1.x он содержит 6 отдельных банок для разных целей, в большинстве случаев вам просто нуженjackson-mapper-asl
.
pom.xml
org.codehaus.jackson jackson-mapper-asl 1.9.13
3. POJO (обычный старый объект Java)
Объект User для тестирования.
User.java
package com.example.json; import java.util.List; public class User { private String name; private int age; private Listmessages; //getters and setters }
4. Объект Java в JSON
Преобразуйте объектuser
в строку в формате JSON.
JacksonExample.java
package com.example.json; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); //For testing User user = createDummyUser(); try { //Convert object to JSON string and save into file directly mapper.writeValue(new File("D:\\user.json"), user); //Convert object to JSON string String jsonInString = mapper.writeValueAsString(user); System.out.println(jsonInString); //Convert object to JSON string and pretty print jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(user); System.out.println(jsonInString); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static User createDummyUser(){ User user = new User(); user.setName("example"); user.setAge(33); Listmsg = new ArrayList<>(); msg.add("hello jackson 1"); msg.add("hello jackson 2"); msg.add("hello jackson 3"); user.setMessages(msg); return user; } }
Выход
//new json file is created in D:\\user.json" {"name":"example","age":33,"messages":["hello jackson 1","hello jackson 2","hello jackson 3"]} { "name" : "example", "age" : 33, "messages" : [ "hello jackson 1", "hello jackson 2", "hello jackson 3" ] }
5. JSON в объект Java
Прочтите строку JSON и преобразуйте ее обратно в объект Java.
JacksonExample.java
package com.example.json; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; public class JacksonExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); try { // Convert JSON string from file to Object User user = mapper.readValue(new File("G:\\user.json"), User.class); System.out.println(user); // Convert JSON string to Object String jsonInString = "{\"age\":33,\"messages\":[\"msg 1\",\"msg 2\"],\"name\":\"example\"}"; User user1 = mapper.readValue(jsonInString, User.class); System.out.println(user1); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }
Выход
User [name=example, age=33, messages=[hello jackson 1, hello jackson 2, hello jackson 3]] User [name=example, age=33, messages=[msg 1, msg 2]]
6. @JsonView
@JsonView
поддерживается в Jackson с версии 1.4, он позволяет вам контролировать, какие поля отображать.
6.1 A simple class.
Views.java
package com.example.json; public class Views { public static class NameOnly{}; public static class AgeAndName extends NameOnly{}; }
6.2 Annotate on the fields you want to display.
User.java
package com.example.json; import java.util.List; import org.codehaus.jackson.map.annotate.JsonView; public class User { @JsonView(Views.NameOnly.class) private String name; @JsonView(Views.AgeAndName.class) private int age; private Listmessages; //getter and setters }
6.3 Enable the @JsonView
via writerWithView()
.
JacksonExample.java
package com.example.json; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.SerializationConfig; public class JacksonExample { public static void main(String[] args) { ObjectMapper mapper = new ObjectMapper(); //By default all fields without explicit view definition are included, disable this mapper.configure(SerializationConfig.Feature.DEFAULT_VIEW_INCLUSION, false); //For testing User user = createDummyUser(); try { //display name only String jsonInString = mapper.writerWithView(Views.NameOnly.class).writeValueAsString(user); System.out.println(jsonInString); //display namd ana age jsonInString = mapper.writerWithView(Views.AgeAndName.class).writeValueAsString(user); System.out.println(jsonInString); } catch (JsonGenerationException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } private static User createDummyUser(){ User user = new User(); user.setName("example"); user.setAge(33); Listmsg = new ArrayList<>(); msg.add("hello jackson 1"); msg.add("hello jackson 2"); msg.add("hello jackson 3"); user.setMessages(msg); return user; } }
Выход
{"name":"example"} {"name":"example","age":33}