资讯专栏INFORMATION COLUMN

java json 库之 jackson

y1chuan / 3518人阅读

摘要:是一个库,提供了完备的解析,序列化以及反序列化功能依赖配置在里面添加依赖配置解析调用就能讲字符串解析成一个对象,然后通过方法就可以获取中各个字段的值了,这种方式可以用来读取格式的配置文件,可以用一个打开特性,可以在里面加入注释

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:http://www.baeldung.com/jackson

Jackson maven 仓库:http://mvnrepository.com/sear...

测试代码链接:https://github.com/hatlonely/...

转载请注明出处 
本文链接:http://hatlonely.com/2018/03/...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/68854.html

相关文章

  • Java中的JSON数据绑定框架Jackson使用介绍

    摘要:系列文章地址文档可以轻松的将对象转换成对象和文档,同样也可以将转换成对象。在项目中如果要引入,可以直接利用或者引入注意,项目已经自动依赖了与,不需要额外重复引入。 Github 系列文章地址 Jackson jackson-databind文档 Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换成Java对象。在项目中如果要引入Jac...

    mengera88 评论0 收藏0
  • 将多个JSON字段映射到单个Java字段

    摘要:简介本文中,教大家如何使用和将不同的字段映射到单个字段中。这两个注解将帮助我们把属性映射到同一字段。因此,将知道文档中映射到字段的其他字段的名称。 简介 本文中,教大家如何使用Jackson和Gson将不同的JSON字段映射到单个Java字段中。 Maven依赖 为了使用Jackson和Gson库,我们需要在POM中添加以下依赖项: com.google.code.gson ...

    printempw 评论0 收藏0
  • java性能调优记录(线程阻塞)

    摘要:其中内容如下网关的逻辑是读取请求中的值,根据字段去内存的路由表中匹配路由,然后转发请求到对应的微服务中去。排查测试接口本身的性能发现接口的可以达到。解决改写代码以实现同样的功能之后进行测试,发现从提升到了,问题解决。 1. 问题 spring-cloud-gateway 作为统一的请求入口,负责转发请求到相应的微服务中去。 采用的 Spring Cloud 的版本为 Finchley ...

    AndroidTraveler 评论0 收藏0
  • SpringMVC接收和响应json数据

    摘要:客户端提交阻止默认事件得到搜索框数据值转为的方法失败啦当前请求方式为控制台输出当前请求方式为客户端弹窗三以方式接收以数组形式传递客户端失败啦注意传递到后端时应为的格式数据,否则可能会出现错误。 前后端的数据交互,除了通过form表单进行提交外,也可以通过ajax向后端传递和接收json格式数据(这种方式可以实现请求数据和页面分离)。本文将总结一下在Spring MVC中接收和响应jso...

    JowayYoung 评论0 收藏0
  • python三方库之requests-快速上手

    摘要:基于发送请求发送请求发送请求其他请求接口与请求类型一致,如等。如果请求返回或状态码,调用会抛出此异常。请求超过配置的最大重定向数。 基于2.21.0 发送请求 发送GET请求: r = requests.get(https://api.github.com/events) 发送POST请求: r = requests.post(https://httpbin.org/post, dat...

    xioqua 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<