博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java json 库之 jackson
阅读量:5849 次
发布时间:2019-06-19

本文共 3052 字,大约阅读时间需要 10 分钟。

jackson 是一个 java json 库,提供了完备的 json 解析,序列化以及反序列化功能

依赖配置

在 build.gradle 里面添加依赖配置

compile group: 'com.fasterxml.jackson.core', name: 'jackson-core', version: '2.9.4'compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.4'compile group: 'com.fasterxml.jackson.core', name: 'jackson-annotations', version: '2.9.4'

json 解析

String jsonString = "{\"name\": \"hatlonely\" /* comment */, \"birthday\": \"2018-03-18 15:26:37\", \"mails\": [\"hatlonely@foxmail.com\", \"hatlonely@gmail.com\"]}";JsonFactory jsonFactory = new JsonFactory();jsonFactory.enable(Feature.ALLOW_COMMENTS);ObjectMapper objectMapper = new ObjectMapper(jsonFactory);JsonNode node = objectMapper.readTree(jsonString);assertThat(node.path("name").asText(), equalTo("hatlonely"));assertThat(node.path("birthday").asText(), equalTo("2018-03-18 15:26:37"));assertThat(node.path("mails").size(), equalTo(2));assertThat(node.path("mails").path(0).asText(), equalTo("hatlonely@foxmail.com"));assertThat(node.path("mails").path(1).asText(), equalTo("hatlonely@gmail.com"));

调用 ObjectMapper.readTree 就能讲 json 字符串解析成一个 JsonNode 对象,然后通过 path 方法就可以获取 json 中各个字段的值了,这种方式可以用来读取 json 格式的配置文件,可以用一个 JsonFactory 打开 ALLOW_COMMENTS 特性,可以在 json 里面加入注释

序列化与反序列化

首先定义一个对象

class Person {    String name;    @JsonFormat(pattern = "yyyy-MM-dd hh:mm:ss")    Date birthday;    @JsonProperty("mails")    List
emails; // 省略了 getter/setter}

除了支持基本的数据类型,还支持 List 和 Map 类型,甚至还支持 Date 类型,Date 类型默认的格式是 ISO8601 格式,也可以通过 @JsonFormat 指定日期格式,通过 @JsonProperty 指定字段在 json 中的字段名

序列化

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));Person person = new Person();person.setName("hatlonely");person.setBirthday(dateFormat.parse("2018-03-18 15:26:37"));person.setEmails(Arrays.asList("hatlonely@foxmail.com", "hatlonely@gmail.com"));ObjectMapper objectMapper = new ObjectMapper();String jsonString = objectMapper.writeValueAsString(person);assertThat(jsonString, equalTo(        "{\"name\":\"hatlonely\",\"birthday\":\"2018-03-18 03:26:37\",\"mails\":[\"hatlonely@foxmail.com\",\"hatlonely@gmail.com\"]}"));

使用 ObjectMapper.writeValueAsString 方法就可以序列化成 string

反序列化

String jsonString = "{\"name\": \"hatlonely\", \"birthday\": \"2018-03-18 15:26:37\", \"mails\": [\"hatlonely@foxmail.com\", \"hatlonely@gmail.com\"]}";ObjectMapper objectMapper = new ObjectMapper();objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);Person person = objectMapper.readValue(jsonString, Person.class);assertThat(person.getName(), equalTo("hatlonely"));SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");dateFormat.setTimeZone(TimeZone.getTimeZone("GMT"));assertThat(person.getBirthday(), equalTo(dateFormat.parse("2018-03-18 15:26:37")));assertThat(person.getEmails(), equalTo(Arrays.asList("hatlonely@foxmail.com", "hatlonely@gmail.com")));

使用 ObjectMapper.readValue 方法就能实现反序列化,可以通过 configure 方法设置碰到未知的属性不抛异常

参考链接

  • Jackson JSON Tutorial:
  • Jackson maven 仓库:
  • 测试代码链接:
转载请注明出处
本文链接:
你可能感兴趣的文章
《iOS应用软件设计之道》—— 1.10 减少问题
查看>>
《高可用架构·中国初创故事(第3期)》一1.5 学习技术、过程和产品
查看>>
如何在Linux服务器中隐藏PHP版本
查看>>
《系统架构:复杂系统的产品设计与开发》——第3章,第3.6节架构展示工具:SysML与OPM...
查看>>
基于图卷积网络的图深度学习
查看>>
《C和C++程序员面试秘笈》——第1章 C/C++程序基础
查看>>
如何选择Linux服务器操作系统
查看>>
《Unity 5.x游戏开发实战》一1.9 添加一个水平面
查看>>
《JavaScript设计模式》——导读
查看>>
《Arduino家居安全系统构建实战》——1.3 部署安全系统的先决条件
查看>>
Linux 中如何通过命令行访问 Dropbox
查看>>
《PHP、MySQL和Apache入门经典(第5版)》一一2.3 在Linux/UNIX上安装MySQL
查看>>
深入实践Spring Boot2.3 使用MongoDB
查看>>
《jQuery移动开发》—— 1.3 小结
查看>>
《游戏编程模式》一7.7 有什么收获吗
查看>>
如何在 Win8 上禁用 UEFI 安全引导以安装Linux
查看>>
如何在Linux下统计高速网络中的流量
查看>>
《Git学习指南》——2.2 第一个Git项目
查看>>
Serverless技术架构——极简运维,无限扩容
查看>>
Distribute Cached 使用
查看>>