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
阅读全文
0 0
- Jackson2库基础用法-Java json 序列化
- Spring3.1, Hibernate4与Jackson2处理Json序列化异常
- Spring4使用jackson2返回json
- jackson2
- Jackson2
- Java 基础----序列化
- Java序列化基础
- Java序列化基础
- Java序列化基础
- python基础—文件 | json序列化
- Python基础-Json和序列化
- 为什么设置了jackson2序列化方式hash的get方法不能反序列化对象
- JAVA对象序列化基础
- JAVA序列化基础概念
- Java基础----序列化问题
- Java基础---序列化Serializable
- java基础之序列化
- JavaWeb基础---Java序列化
- codeforces 810 C
- 关于热更新动态加载替换application相关1
- Leetcode Day5 20. Valid Parentheses Python 栈的实现
- mac下Hadoop、HDFS、Spark环境的安装和搭建
- HDU 1536 S-Nim 博弈论-SG定理
- Jackson2库基础用法-Java json 序列化
- python使用模块chardet判断字符编码
- 进阶篇:3.10)铝型材(铝挤)件设计;
- 文本查询程序再探(C++primer5th)
- 热更新2
- Spring boot 打成jar包问题总结
- POJ 3680 Intervals 费用流构图题(区间的一定考虑相邻的)
- MYIR-ZYNQ7000系列-zturn教程(5):gpio_axi
- c++返回一个对象