Java处理json编程之Jackson使用篇
文章目录
- Java处理json编程之Jackson使用篇
- Jackson概述
- 使用步骤
- 场景
- 1. 数组和json串的互相转换
- 2. map和json串的互相转换
- 3. list和json串的互相转换
- 4. javabean和json串的互相转换
- 5. 写json串到文件、从文件中读取到对象
- 完整的代码示例
Java处理json编程之Jackson使用篇
(本文章分享在CSDN平台,更多精彩请阅读 东陆之滇的csdn博客:http://blog.csdn.net/zixiao217 ,如在其他平台看到此文可能会出现内容不完整的现象,请移至东陆之滇http://blog.csdn.NET/zixiao217查看原文)
Jackson概述
Jackson 是一个操作json的库。
Jackson 提供了 writeValue() 和 readValue() 系列方法在javabean和json串之间进行转换。
github地址: https://github.com/codehaus/jackson
相关文档可以参考: https://github.com/FasterXML/jackson-docs
使用步骤
引入jar包(或者maven依赖)
- jar包:jackson-annotations-2.2.3.jar、jackson-core-2.2.3.jar、jackson-databind-2.2.3.jar
- maven依赖
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.2.3</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.2.3</version></dependency>
创建
ObjectMapper
(映射器、数据绑定器、编解码器)- 该映射器(或数据绑定器或编解码器)提供用于在Java对象(JDK的实例提供的核心类,bean)与匹配的JSON构造之间进行转换的功能。它底层使用
JsonParser
和JsonGenerator
的实例来实现JSON的实际读取/写入。
主要的编程API是在抽象类ObjectCodec
中定义的。
- 该映射器(或数据绑定器或编解码器)提供用于在Java对象(JDK的实例提供的核心类,bean)与匹配的JSON构造之间进行转换的功能。它底层使用
操作读写(readValue()、writeValue())
- readValue() : 读取json串转换为java对象
- 读最常用的方法:readValue(String content, Class valueType)
- writeValue(): 将java对象转换为json串
- 写最常用的方法:String writeValueAsString(Object value)
- readValue() : 读取json串转换为java对象
场景
1. 数组和json串的互相转换
代码块
System.out.println("===========数组和json串的互相转换===========");
int[] arr = new int[]{1,2,3};
System.out.println("数组-->json串:" + objectMapper.writeValueAsString(arr));
System.out.println("json串-->数组:" + Arrays.toString(objectMapper.readValue("[1,2,3]", Object[].class)));
运行结果
===========数组和json串的互相转换===========
数组-->json串:[1,2,3]
json串-->数组:[1, 2, 3]
2. map和json串的互相转换
代码块
// 2. map和json串的互相转换
System.out.println("===========map和json串的互相转换===========");
Map<String, Object> map = new HashMap<>();
map.put("aKey", "aVal");
map.put("bKey", 200);
map.put("cKey", new User());
System.out.println("map-->json串:" + objectMapper.writeValueAsString(map));
String jsonStr = "{\"bKey\":200,\"cKey\":{\"id\":0,\"username\":null,\"password\":null,\"email\":null,\"phone\":null},\"aKey\":\"aVal\"}";
System.out.println("json串-->map:" + objectMapper.readValue(jsonStr, Map.class));
运行结果
===========map和json串的互相转换===========
map-->json串:{"bKey":200,"cKey":{"id":0,"username":null,"password":null,"email":null,"phone":null},"aKey":"aVal"}
json串-->map:{bKey=200, cKey={id=0, username=null, password=null, email=null, phone=null}, aKey=aVal}
3. list和json串的互相转换
代码块
System.out.println("===========list和json串的互相转换===========");
List<String> list = new ArrayList<>();
list.add("zs");
list.add("ls");
list.add("ww");
System.out.println("list-->json串:" + objectMapper.writeValueAsString(list));
jsonStr = "[\"zs\",\"ls\",\"ww\"]";
System.out.println("json串-->list:" + objectMapper.readValue(jsonStr, ArrayList.class));
运行结果
===========list和json串的互相转换===========
list-->json串:["zs","ls","ww"]
json串-->list:[zs, ls, ww]
4. javabean和json串的互相转换
代码块
System.out.println("===========javabean和json串的互相转换===========");
User user = new User();
user.setId(1);
user.setUsername("zs");
user.setPassword("123456");
user.setEmail("zs@126.com");
user.setPhone("13333333333");
System.out.println("javabean-->json串:" + objectMapper.writeValueAsString(user));
jsonStr = "{\"id\":1,\"username\":\"zs\",\"password\":\"123456\",\"email\":\"zs@126.com\",\"phone\":\"13333333333\"}";
System.out.println("json串-->javabean:" + objectMapper.readValue(jsonStr, User.class));
运行结果
===========javabean和json串的互相转换===========
javabean-->json串:{"id":1,"username":"zs","password":"123456","email":"zs@126.com","phone":"13333333333"}
json串-->javabean:User{id=1, username='zs', password='123456', email='zs@126.com', phone='13333333333'}
5. 写json串到文件、从文件中读取到对象
代码块
System.out.println("===========写json串到文件、从文件中读取到对象===========");
// 写对象到文件里面
objectMapper.writeValue(new File("user.json"), user);
// 从文件中读取数据到对象中
User user1 = objectMapper.readValue(new File("user.json"), User.class);
System.out.println(user1);
运行结果
===========写json串到文件、从文件中读取到对象===========
User{id=1, username='zs', password='123456', email='zs@126.com', phone='13333333333'}
完整的代码示例
public class JacksonTest {@Testpublic void test() throws Exception{ObjectMapper objectMapper = new ObjectMapper();// 查看版本号System.out.println("objectMapper.version():" + objectMapper.version());// 1. 数组和json串的互相转换System.out.println("===========数组和json串的互相转换===========");int[] arr = new int[]{1,2,3};System.out.println("数组-->json串:" + objectMapper.writeValueAsString(arr));System.out.println("json串-->数组:" + Arrays.toString(objectMapper.readValue("[1,2,3]", Object[].class)));// 2. map和json串的互相转换System.out.println("===========map和json串的互相转换===========");Map<String, Object> map = new HashMap<>();map.put("aKey", "aVal");map.put("bKey", 200);map.put("cKey", new User());System.out.println("map-->json串:" + objectMapper.writeValueAsString(map));String jsonStr = "{\"bKey\":200,\"cKey\":{\"id\":0,\"username\":null,\"password\":null,\"email\":null,\"phone\":null},\"aKey\":\"aVal\"}";System.out.println("json串-->map:" + objectMapper.readValue(jsonStr, Map.class));// 3. list和json串的互相转换System.out.println("===========list和json串的互相转换===========");List<String> list = new ArrayList<>();list.add("zs");list.add("ls");list.add("ww");System.out.println("list-->json串:" + objectMapper.writeValueAsString(list));jsonStr = "[\"zs\",\"ls\",\"ww\"]";System.out.println("json串-->list:" + objectMapper.readValue(jsonStr, ArrayList.class));// 4. javabean和json串的互相转换System.out.println("===========javabean和json串的互相转换===========");User user = new User();user.setId(1);user.setUsername("zs");user.setPassword("123456");user.setEmail("zs@126.com");user.setPhone("13333333333");System.out.println("javabean-->json串:" + objectMapper.writeValueAsString(user));jsonStr = "{\"id\":1,\"username\":\"zs\",\"password\":\"123456\",\"email\":\"zs@126.com\",\"phone\":\"13333333333\"}";System.out.println("json串-->javabean:" + objectMapper.readValue(jsonStr, User.class));System.out.println("===========写json串到文件、从文件中读取到对象===========");// 写对象到文件里面objectMapper.writeValue(new File("user.json"), user);// 从文件中读取数据到对象中User user1 = objectMapper.readValue(new File("user.json"), User.class);System.out.println(user1);}}
此篇仅仅介绍了jackson的基础使用。
Java处理json编程之Jackson使用篇相关推荐
- 【java 高并发编程之JUC】2w字带你JUC从入门到精通
点击查看脑图目录地址,实时更新 1 什么是 JUC 1.1 JUC 简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurr ...
- 【java 高并发编程之JUC】高阶JUC特性总结
1 线程中断机制 1.1 什么是中断? 首先 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止.所以,Thread.stop, Thread.suspend, Thread.res ...
- Java:网络编程之UDP的使用
java.net 类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net 类 DatagramPacket 此类表示数 ...
- Java NIO网络编程之Selector
概述 Java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个客户端连接(多路复用),就会用到Selector(多路复用器/选择器). Selector能够检测多个注册通道channel上是否有 ...
- java NIO网络编程之SelectionKey
概述 SelectionKey是java.nio.channels包下的一个类,主要用于绑定selector和chanel之间的关联(注册关系). SelectionKey定义了selector监控事 ...
- Java与XML编程之SAX
SAX概念 SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是"民间"的事实标准.实际上,它是一种社区性质的讨论产物.虽然如此,在XM ...
- iPhone socket 编程之BSD Socket篇
最后为了造福大家,笔者附上完整 的代码,头文件如下: // // BSDHttpExampleViewController.h // BSDHttpExample // // Created b ...
- jtable如何从表格中定位_Java Swing组件编程之JTable表格用法实例详解
本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能 ...
- Java 并发编程之美:并发编程高级篇之一-chat
借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...
最新文章
- jsp java数据,jsp怎么遍历数据
- pma mysql_Table ‘phpmyadmin.pma_table_uiprefs’ doesn’t exist mysql
- 或许不理解,但你一定说过的游戏黑话
- 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计
- linux循环读取文件里的ip,自动获取文件里IP的shell脚本
- asp.net 连接access数据库方法
- JVM史上最最最完整深入解析,不看后悔一百次!
- 数据库并发一致性的问题
- Scala键盘录入代码示例
- 深入解析 Dubbo 3.0 服务端暴露全流程
- linux 系统监控、诊断工具之 IO wait
- [Codeforces]Codeforces Round #460 (Div. 2)
- 陈睿:架构设计之数据库拆分六大原则
- openstack网络指南_性格内向的战术网络指南
- 帧栈使用的基本用法c语言,栈帧详解
- Ubuntu18.04之星际译王及辞典
- Chrome插件分享—不定期更新
- 未来计算机体系结构探索,未来计算机体系结构将是什么样的发展趋势
- [日常]wps插入页眉页脚
- 2019保研Tips:双非推免南京大学