Jackson2库基础用法-Java json 序列化

来源:互联网 发布:淘宝拒签后怎么处理 编辑:程序博客网 时间:2024/06/04 19:18

Jackson2库基础用法-Java json 序列化

依赖

<dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-annotations</artifactId>  <version>2.8.0</version></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-core</artifactId>  <version>2.8.7</version></dependency><dependency>  <groupId>com.fasterxml.jackson.core</groupId>  <artifactId>jackson-databind</artifactId>  <version>2.8.7</version></dependency>

用法示例

  • 如何解析json字符串?
String json1 = "{\"name\":\"zhang\", \"age\":200,\"map\":{\"a\":\"b\"},\"list\":[{\"a\":0,\"b\":\"100\"},{\"a\":0,\"b\":\"100\"}]}";ObjectMapper om = new ObjectMapper();JsonNode root = om.readTree(json1);String name = root.get("name").asText();assertEquals("zhang",name);int age = root.get("age").asInt();assertEquals(200,age);assertEquals("100",root.get("list").get(1).get("b").asText());JsonNode map = root.get("map");if(map.getNodeType()== JsonNodeType.OBJECT){    String jsonValue = map.toString();    System.out.println("Node Json String:"+jsonValue);    Iterator<JsonNode> iterator = map.elements();    while(iterator.hasNext()){        JsonNode node = iterator.next();        System.out.println(node.asText());    }}
  • 如何序列化对象为json字符串?
class Obj{    private String name="name";    private int age=100;    private String nullPro = null;    public String getNullPro() {        return nullPro;    }    public void setNullPro(String nullPro) {        this.nullPro = nullPro;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}----Map<String,Object> objectMap = new HashMap<>();objectMap.put("obj",new Obj());objectMap.put("list",Arrays.asList(new String[]{"hello","jackson"}));objectMap.put("string","ok");objectMap.put("null",null);objectMap.put("number",12e3-1);ObjectMapper om = new ObjectMapper();om.setSerializationInclusion(JsonInclude.Include.NON_NULL);System.out.println(om.writer().withDefaultPrettyPrinter().writeValueAsSting(objectMap));
  • 如何解析json字符串为Map对象?
String json1 = "{\"name\":\"zhang\", \"age\":200,\"map\":{\"a\":\"b\"},\"list\":[{\"a\":0,\"b\":\"100\"},{\"a\":0,\"b\":\"100\"}]}";ObjectMapper om = new ObjectMapper();Map<String, Object> map = om.readValue(json1, new TypeReference<Map<String, Object>>() {});assertTrue(map.get("name") instanceof String);assertTrue(map.get("age") instanceof Integer);assertTrue(map.get("map") instanceof Map);assertTrue(map.get("list") instanceof List);System.out.println(map);

通过 TypeReference 对象还可以将json字符串转成List<Object>

  • 如何定义对象序列化的日期格式?
Map<String, Object> map = new HashMap<>();map.put("date", new Date());ObjectMapper om = new ObjectMapper();DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");String json = om.writer().with(df).withDefaultPrettyPrinter().writeValueAsString(map);System.out.println(json);
  • 通过传入一个注解对象来格式化对象输出?
abstract class MixInAnn{    @JsonIgnore    String passwd;    @JsonProperty(value = "userId")    String id;}class Obj {    private int id=0;    private String passwd="123456";    private String name = "name";    private int age = 100;    //... setter and getter}----ObjectMapper om = new ObjectMapper();om.addMixIn(Obj.class,MixInAnn.class);Obj obj = new Obj();System.out.println(om.writer().withDefaultPrettyPrinter().writeValueAsSring(obj));

通过 addMinIn 可以在不侵入原始POJO对象的情况下,格式化序列化结果

  • 同一个对象在不同环境下序列化出不同的值
class Views {    public static class Normal{};    public static class Manager extends Normal{};}class Obj {    @JsonView(Views.Normal.class)    private int id=0;    @JsonView(Views.Manager.class)    private String passwd="123456";    @JsonView(Views.Normal.class)    private String name = "name";    @JsonView(Views.Normal.class)    private int age = 100;    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getPasswd() {        return passwd;    }    public void setPasswd(String passwd) {        this.passwd = passwd;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}---ObjectMapper om = new ObjectMapper();Obj obj = new Obj();String normal = om.writer().withView(Views.Normal.class).withDefaultPrettyPrinter().writeValueAsString(obj);String manager = om.writer().withView(Views.Manager.class).withDefaultPrettyPrinter().writeValueAsString(obj);System.out.println(normal);System.out.println(manager);

类比数据库的视图模式和@JsonView,很容易理解它的使用场景

更多详细用法:

https://github.com/FasterXML/jackson-docs
https://github.com/FasterXML/jackson-docs/wiki

原创粉丝点击