Jackson简单用法
程序员文章站
2022-06-01 07:49:59
...
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();
//。。。。等等方法。
}
上一篇: jackson对于默认值不进行序列化
下一篇: json-Jackson简单使用介绍