Jackson基本使用教程
如何将一个Json序列化对象封装成为一个Pojo是实体类对象
public static void main(String[] args) {
//创建ObjectMapper对象,这是一个可重复使用的对象
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh\", \"age\":21}";
//map to json student
try {
//反序列化得到JSON对象,
// 从JSON对象使用readValue方法来获取,通过JSON字符串对象类型作为参数JSON字符串(json字符串,字符串类型)
Student student = mapper.readValue(jsonString, Student.class);
System.out.println(student.toString());
//设置JSON的格式[缩进、单\双引号....]
mapper.enable(SerializationFeature.INDENT_OUTPUT);
//使用writeValueAsString()方法来获取对象的JSON字符串表示。
jsonString = mapper.writeValueAsString(student);
System.out.println(jsonString);
} catch (Exception e) {
e.printStackTrace();
}
}
如何进行序列化与反序列化
public static void main(String[] args) {
JacksonSer jacksonSer = new JacksonSer();
try {
Student student = new Student();
student.setAge(22);
student.setName("RenZetong");
//将Pojo对象序列化为Json
jacksonSer.writeJSON(student);
//将Json反序列化为Pojo对象
Student student1 = jacksonSer.readJSON();
System.out.println(student1);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 序列化
*
* @param student
* @throws Exception
*/
private void writeJSON(Student student) throws Exception {
ObjectMapper mapper = new ObjectMapper();
//使用writeValue来将Json文件写入(Json文件,映射类)
mapper.writeValue(new File("./data/student.json"), student);
}
/**
* 反序列化
*
* @return
* @throws Exception
*/
private Student readJSON() throws Exception {
ObjectMapper mapper = new ObjectMapper();
//从JSON对象使用readValue方法来获取,通过JSON字符串对象类型作为参数JSON字符串(json字符串,字符串类型)
Student student = mapper.readValue(new File("./data/student.json"), Student.class);
return student;
}
如何将数据进行绑定
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> studentMap = new HashMap<>();
int[] marks = {1, 2, 3};
Student student = new Student();
student.setAge(10);
student.setName("Mahesh");
//Java Object 也就是实体类对象
studentMap.put("student", student);
//Java String 也就是键值对
studentMap.put("name", "Mahesh Kumar");
//Java Boolean
studentMap.put("verified", Boolean.FALSE);
//Array Type 数组类型
studentMap.put("marks", marks);
//将map数据序列化为Json
//mapper.writeValue(new File("./data/students.json"), studentMap);
//将复杂型Json通过readValue解析到Map集合中(Json文件,映射类型) 反序列化
studentMap = mapper.readValue(new File("./data/students.json"), Map.class);
//反序列化集合中的Json数据
System.out.println(studentMap.get("student"));
System.out.println(studentMap.get("name"));
System.out.println(studentMap.get("verified"));
System.out.println(studentMap.get("marks"));
//反序列化数组对象
List<Integer> list = (List<Integer>) studentMap.get("marks");
for (Integer integer : list) {
System.out.println(integer);
}
}
如何进行泛型数据绑定
public String method() throws IOException {
ObjectMapper mapper = new ObjectMapper();
User user = new User();
user.setId(1);
Pager<User> pager = new Pager<User>();
List<User> users = new ArrayList<User>();
users.add(user);
pager.setDatas(users);
String json = mapper.writeValueAsString(pager);
// 方式1
Pager<User> userPager1 = mapper.readValue(json, new TypeReference<Pager<User>>() {
});
// 方式2
Type[] types = new Type[1];
types[0] = User.class;
final ParameterizedTypeImpl type = ParameterizedTypeImpl.make(Pager.class, types, Pager.class.getDeclaringClass());
TypeReference typeReference = new TypeReference<Pager>() {
@Override
public Type getType() {
return type;
}
};
Pager<User> userPager2 = mapper.readValue(json, typeReference);
// 方式3
JavaType javaType = mapper.getTypeFactory().constructParametrizedType(Pager.class, Pager.class, User.class);
Pager<User> userPager3 = mapper.readValue(json, javaType);
// 方式4
JavaType javaType1 = mapper.getTypeFactory().constructParametricType(Pager.class, User.class);
Pager<User> userPager4 = mapper.readValue(json, javaType1);
// 方式5,新建另一个指定具体泛型T的参数的类
PagerAppoint userPager5 = mapper.readValue(json, PagerAppoint.class);
// 数组泛型的序列化和反序列化
String json1 = mapper.writeValueAsString(users);
JavaType javaType2 = mapper.getTypeFactory().constructParametricType(List.class, User.class);
List<User> users1 = mapper.readValue(json1, javaType2);
// HashMap
Map<String, User> map = new HashMap<String, User>(16);
map.put("test", user);
String json2 = mapper.writeValueAsString(map);
// 1
Map<String, User> users2 = mapper.readValue(json2, new TypeReference<Map<String, User>>() {
});
// 2
JavaType javaType3 = mapper.getTypeFactory().constructParametricType(HashMap.class, String.class, User.class);
Map<String, User> users3 = mapper.readValue(json2, javaType3);
return "hello world";
}
}
如何使用Jackson树模型(将复杂Json手动映射到类型)
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
String jsonString = "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
//使用readTree来读取json数据
JsonNode rootNode = mapper.readTree(jsonString);
//使用path获取节点
JsonNode nameNode = rootNode.path("name");
System.out.println("Name: " + nameNode.textValue());
JsonNode ageNode = rootNode.path("age");
System.out.println("Age: " + ageNode.intValue());
JsonNode verifiedNode = rootNode.path("verified");
System.out.println("Verified: " + verifiedNode.booleanValue());
JsonNode marksNode = rootNode.path("marks");
Iterator<JsonNode> iterator = marksNode.elements();
System.out.println("Marks:[");
for (JsonNode node : marksNode) {
System.out.println(node.intValue());
}
System.out.println("]");
}
读取json文件进行树遍历
public static void main(String[] args) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode;
//读取Json文件到JsonNode;
rootNode = mapper.readTree(new File("./data/students.json"));
//使用树模型来读取Json文件并映射到Pojo对象
UserInfo userInfo = mapper.treeToValue(rootNode, UserInfo.class);
System.out.println("Name: " + userInfo.getName());
}
使用Jackson进行流式处理
JacksonParse类用于读取Json,JacksonGenerator用于编写Json
public static void main(String[] args) throws Exception {
//writeJSON();
readJSON();
}
//使用JsonGenerator写入JSON
public static JsonGenerator writeJSON() throws Exception {
JsonFactory jsonFactory = new JsonFactory();
//创建json输出路径以及字符编码
JsonGenerator jsonGenerator = jsonFactory.createGenerator(new File("./data/stu.json"), JsonEncoding.UTF8);
//{
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("name", "RenZetong");
jsonGenerator.writeNumberField("age", 22);
jsonGenerator.writeBooleanField("verified", false);
//marks:[
jsonGenerator.writeFieldName("marks");
jsonGenerator.writeStartArray();
jsonGenerator.writeNumber(100);
jsonGenerator.writeNumber(90);
jsonGenerator.writeNumber(85);
jsonGenerator.writeEndArray();
//]
jsonGenerator.writeEndObject();
jsonGenerator.close();
//}
return jsonGenerator;
//result student.json
//{
// "name":"Mahesh Kumar",
// "age":21,
// "verified":false,
// "marks":[100,90,85]
//}
}
//使用JsonParser解析JSON字符串
public static void readJSON() throws Exception {
JsonFactory jsonFactory = new JsonFactory();
JsonParser jsonParser = jsonFactory.createParser(new File("./data/stu.json"));
//如果没有迭代到Json对象结束节点则一直循环
while (jsonParser.nextToken() != JsonToken.END_OBJECT) {
//获取当前节点名称
String fieldName = jsonParser.getCurrentName();
if ("name".equals(fieldName)) {
//如果没有剩余标记则停止迭代
jsonParser.nextToken();
//获取当前节点值
System.out.println(jsonParser.getText());
}
if ("age".equals(fieldName)) {
jsonParser.nextToken();
System.out.println(jsonParser.getNumberValue());
}
if ("verified".equals(fieldName)) {
jsonParser.nextToken();
System.out.println(jsonParser.getBooleanValue());
}
if ("marks".equals(fieldName)) {
jsonParser.nextToken();
//如果没有迭代到Json数组对象结束节点则一直循环
while (jsonParser.nextToken() != JsonToken.END_ARRAY) {
System.out.println(jsonParser.getNumberValue());
}
}
}
}
Jackson基本使用教程的更多相关文章
- 来自Jakob Jenkov的Jackson教程
Jakob Jenkov是Java界的牛人. 下面是收集的与Jackson有关的教程: JSON: http://tutorials.jenkov.com/java-json/index.html J ...
- Jackson 教程演示样例
查看原文教程:http://www.ibloger.net/article/275.html Json经常使用的类库例如以下 Jackson:http://jackson.codehaus.org/ ...
- 使用Jackson来实现Java对象与JSON的相互转换的教程
一.入门Jackson中有个ObjectMapper类很是实用,用于Java对象与JSON的互换.1.JAVA对象转JSON[JSON序列化] 1 2 3 4 5 6 7 8 9 10 11 12 1 ...
- Jackson教程
Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象.Jackson所依赖的jar包较少,简 ...
- Jackson 解析 JSON 详细教程
点赞再看,动力无限. 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. JSON 对于开发者并不陌生,如今的 ...
- [转]SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
原文地址:http://blog.csdn.net/zhshulin/article/details/37956105#comments 使用SSM(Spring.SpringMVC和Mybatis) ...
- 【转】SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
原文地址:http://blog.csdn.net/zhshulin/article/details/37956105 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了, ...
- Spring MVC 教程,快速入门,深入分析
http://elf8848.iteye.com/blog/875830/ Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: ...
- Spring_MVC_教程_快速入门_深入分析
Spring MVC 教程,快速入门,深入分析 博客分类: SPRING Spring MVC 教程快速入门 资源下载: Spring_MVC_教程_快速入门_深入分析V1.1.pdf Spring ...
- Jackson注解学习参考(转)
转:http://wong-john.iteye.com/blog/1753402 以下内容摘录.翻译自https://github.com/FasterXML/jackson-annotations ...
随机推荐
- Java使用snmp协议采集服务器信息
Java使用snmp协议采集服务器信息 一.snmp简介 SNMP是专门设计用于在 IP 网络管理网络节点(服务器.工作站.路由器.交换机及Hubs等)的一种标准协议,它是一种应用层协议. ...
- Nuxt.js 应用中的 app:suspense:resolve 钩子详解
title: Nuxt.js 应用中的 app:suspense:resolve 钩子详解 date: 2024/10/6 updated: 2024/10/6 author: cmdragon ex ...
- linux安装SVN并设置SVN钩子
linux安装SVN并设置SVN钩子 检查已安装版本 #检查是否安装了低版本的SVN rpm -qa subversion #卸载旧版本SVN yum rovesubversion 一.安装SVN y ...
- 支付宝 APP登录 获取用户信息 PHP(转)
转载自:https://blog.csdn.net/wang78699425/article/details/78666401 支付宝 APP登录 获取用户信息 PHP(转) 支付宝APP登录服务端流 ...
- Uefi ABL读取XBL设置的标志位
PBL(启动固化程序)-> XBL(扩展引导加载程序,负责初始化芯片驱动和核心应用功能.XBL通常会加载一些平台相关的驱动程序,并提供通用接口)-> ABL(应用引导加载程序,负责引导操作 ...
- kmemleak 和kasan 的区别
kmemleak 和kasan 都是 Linux 内核中的一些工具和特性,用于帮助进行内存错误检测和修复.然而,它们之间有一些区别: 功能:kmemleak 用于检测内核中未释放的内存泄漏,它可以跟踪 ...
- 墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密
在共同推进国产化生态发展的进程下,墨天轮正式推出"墨天轮国产数据库沙龙"系列直播活动,将定期邀请各国产数据库产品专家.掌门人,共同探讨如何达成技术"自主可控"的 ...
- 盘点.NET支持的 处理器架构
在一个会议上,中国招投标协会的技术负责人居然当着很多领导的面说.NET不能在国产服务器上运行,可以说这个技术负责人非蠢即坏.国产服务器的处理器架构主要包括x86.ARM.LoongArch.risc- ...
- 从零开始学机器学习——构建一个推荐web应用
首先给大家介绍一个很好用的学习地址:https://cloudstudio.net/columns 今天,我们终于将分类器这一章节学习完活了,和回归一样,最后一章节用来构建web应用程序,我们会回顾之 ...
- 征服 Docker 镜像访问限制:KubeSphere v3.4.1 成功部署全攻略
近期,KubeSphere 社区的讨论中频繁出现关于 Docker 官方镜像仓库访问受限的问题. 本文旨在为您提供一个详细的指南, 展示在 Docker 官方镜像访问受限的情况下,如何通过 KubeK ...