文章目录

  • 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构造之间进行转换的功能。它底层使用JsonParserJsonGenerator的实例来实现JSON的实际读取/写入。
      主要的编程API是在抽象类ObjectCodec中定义的。
  • 操作读写(readValue()、writeValue())

    • readValue() : 读取json串转换为java对象

      • 读最常用的方法:readValue(String content, Class valueType)
    • writeValue(): 将java对象转换为json串
      • 写最常用的方法:String writeValueAsString(Object value)

场景

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使用篇相关推荐

  1. 【java 高并发编程之JUC】2w字带你JUC从入门到精通

    点击查看脑图目录地址,实时更新 1 什么是 JUC 1.1 JUC 简介 在 Java 中,线程部分是一个重点,本篇文章说的 JUC 也是关于线程的.JUC 就是 java.util .concurr ...

  2. 【java 高并发编程之JUC】高阶JUC特性总结

    1 线程中断机制 1.1 什么是中断? 首先 一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止.所以,Thread.stop, Thread.suspend, Thread.res ...

  3. Java:网络编程之UDP的使用

    java.net  类 DatagramSocket 此类表示用来发送和接收数据报包的套接字,数据报套接字是包投递服务的发送或接收点. java.net  类 DatagramPacket 此类表示数 ...

  4. Java NIO网络编程之Selector

    概述 Java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个客户端连接(多路复用),就会用到Selector(多路复用器/选择器). Selector能够检测多个注册通道channel上是否有 ...

  5. java NIO网络编程之SelectionKey

    概述 SelectionKey是java.nio.channels包下的一个类,主要用于绑定selector和chanel之间的关联(注册关系). SelectionKey定义了selector监控事 ...

  6. Java与XML编程之SAX

    SAX概念  SAX是Simple API for XML的缩写,它并不是由W3C官方所提出的标准,可以说是"民间"的事实标准.实际上,它是一种社区性质的讨论产物.虽然如此,在XM ...

  7. iPhone socket 编程之BSD Socket篇

    最后为了造福大家,笔者附上完整 的代码,头文件如下: // //  BSDHttpExampleViewController.h //  BSDHttpExample // //  Created b ...

  8. jtable如何从表格中定位_Java Swing组件编程之JTable表格用法实例详解

    本文实例讲述了Java Swing组件编程之JTable表格用法.分享给大家供大家参考,具体如下: 表格是GUI编程中使用较多,但也是最麻烦的一个控件之一.表格是用来显示二维数据,提供编辑,选择等功能 ...

  9. Java 并发编程之美:并发编程高级篇之一-chat

    借用 Java 并发编程实践中的话:编写正确的程序并不容易,而编写正常的并发程序就更难了.相比于顺序执行的情况,多线程的线程安全问题是微妙而且出乎意料的,因为在没有进行适当同步的情况下多线程中各个操作 ...

最新文章

  1. jsp java数据,jsp怎么遍历数据
  2. pma mysql_Table ‘phpmyadmin.pma_table_uiprefs’ doesn’t exist mysql
  3. 或许不理解,但你一定说过的游戏黑话
  4. 亿万级图数据库 Nebula Graph 的数据模型和系统架构设计
  5. linux循环读取文件里的ip,自动获取文件里IP的shell脚本
  6. asp.net 连接access数据库方法
  7. JVM史上最最最完整深入解析,不看后悔一百次!
  8. 数据库并发一致性的问题
  9. Scala键盘录入代码示例
  10. 深入解析 Dubbo 3.0 服务端暴露全流程
  11. linux 系统监控、诊断工具之 IO wait
  12. [Codeforces]Codeforces Round #460 (Div. 2)
  13. 陈睿:架构设计之数据库拆分六大原则
  14. openstack网络指南_性格内向的战术网络指南
  15. 帧栈使用的基本用法c语言,栈帧详解
  16. Ubuntu18.04之星际译王及辞典
  17. Chrome插件分享—不定期更新
  18. 未来计算机体系结构探索,未来计算机体系结构将是什么样的发展趋势
  19. [日常]wps插入页眉页脚
  20. 2019保研Tips:双非推免南京大学

热门文章

  1. Harris读书笔记(角点检测)
  2. 作业案例—设计学生类
  3. swift判断手机越狱代码和文件常用路径
  4. 沃尔玛Walmart EDI 850订单详解
  5. Linux: cp 复制文件、文件夹到文件夹、mv重命名
  6. 留学选校+个人定位工具— “指南者留学”APP正式上线
  7. 飞书开放平台-发送个人群名片消息示例
  8. 什么是数字沙盘及其优势
  9. 王者论证-运用PRINCE2赢得足球比赛
  10. 中维世纪安卓开发文档