Jackson简单用法

Jackson用法

Spring Boot 默认集成使用了Jackson,既然是SpringBoot的选择,那么肯定有其过人的优势。所以,这边简单记录下Jackson的用法。方法自己日用复习使用,记录的比较简单,欢迎留贴讨论。

1.Java pojo实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pet {
    private String name;
    private Integer age;
}

@Data
public class People {
    private String name;
    private int age;
    private boolean isAdult;
    private double salary;
    private Date birthday;
    private List<Pet> pets;
    private Map<String,String> others;
}

public class PeopleFactory {
    public static People getPeople() throws ParseException {
        People people=new People();
        people.setName("张三");
        people.setAge(26);
        people.setAdult(true);
        people.setSalary(7800.12);
        people.setBirthday(DateUtils.parseDate("1993-08-08 18:18:18","yyyy-MM-dd HH:mm:ss"));
        people.setPets(Arrays.asList(new Pet("小黄",1),new Pet("小蓝",2)));
        Map<String,String> map=new HashMap<>();
        map.put("爱好","下棋");
        map.put("女友","小美");
        people.setOthers(map);
        return people;
    }
}

2.Java对象转json字符串

2.1简单转换成字符串格式输出
public static void main(String[] args) throws Exception {
        People people = PeopleFactory.getPeople();

        //jackson的核心,通过mapper来进行序列化和反序列化
        ObjectMapper mapper=new ObjectMapper();

        //序列化,write相关方法!write可以是序列化输出多种格式,当然这边最常用就是写成为String返回前端
        String jsonStr1 = mapper.writeValueAsString(people);
        System.out.println(jsonStr1);

        System.out.println("===============================================================");

        //设置序列化后的格式,INDENT_OUTPUT表示缩进输出,true表示试该配置生效
        mapper.configure(SerializationFeature.INDENT_OUTPUT,true);
        String jsonStr2 = mapper.writeValueAsString(people);
        System.out.println(jsonStr2);
    }

2.2带有jackson注解的javabean序列化
上面的实体类中这两个属性添加注解
@JsonProperty(value = "myName")
private String name;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date birthday;

再看输出:

其他注解参考:https://github.com/FasterXML/jackson-annotations/wiki/Jackson-Annotations

3.Json转java对象

主要掌握ObjectNode和ArrayNode的相关方法就可以了。有点类似以前的dom树

public static void main(String[] args) throws Exception {
        String json = "{\"age\":26,\"salary\":7800.12,\"birthday\":\"1993-08-08 10:18:18\",\"pets\":[{\"name\":\"小黄\",\"age\":1},{\"name\":\"小蓝\",\"age\":2}],\"others\":{\"爱好\":\"下棋\",\"女友\":\"小美\"},\"adult\":true,\"myName\":\"张三\"}";

        ObjectMapper mapper = new ObjectMapper();

        //反序列化都是ObjectMapper.read相关方法
        //第一种方式,如果有对应的javaBean接收,可以这样,直接做
        People people = mapper.readValue(json, People.class);
        System.out.println(people);

        //第二种方式,如果没有对应的javaBean接收,可以用ObjectNode接收
        ObjectNode objectNode = mapper.readValue(json, ObjectNode.class);
        //jackson中json对象就是一个个node

        //查找node和值得几种方式区别
        /*
         * 1.findValue   从当前节点开始查询子孙节点,只要有匹配的节点就返回该节点否则返回null
         * 2.get         仅查询当前节点是否有匹配的节点
         * 3.with        仅查询当前节点是否有匹配的节点,若有,则该节点必须是ObjectNode,若无,则自动创建一个
         * 4.withArray   仅查询当前节点是否有匹配的节点,若有,则该节点必须是ArrayNode,若无,则自动创建一个
         */
        objectNode.findValue("女友");
        objectNode.get("pets");
        objectNode.with("others");
        objectNode.withArray("pets");


        //ObjectNode节点数据的添加
        //因为objectNode没有"myNode"节点,
        // 所有当调用objectNode.with("myNode")自动就添加了该节点,然后我们可以往该节点里面添加数据
        ObjectNode myNode = objectNode.with("myNode");
        myNode.put("key1", "value1");
        myNode.put("key2", 19.9);


        //ArrayNode节点数据的添加
        ArrayNode myArrayNode = objectNode.withArray("myArrayNode");
        myArrayNode.add("");
        //添加一个ObjectNode,然后又往这个ObjectNode里面放东西。
        ObjectNode jsonNodes = myArrayNode.addObject();
        //。。。。等等方法。
    }

猜你喜欢

转载自blog.csdn.net/ljqwstc/article/details/80716585