杰克逊顶部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程

1.概述

在本教程中,我们将看到如何使用Jackson将XML消息转换为JSON。

对于杰克逊新的读者,考虑熟悉基础知识第一的。

2.杰克逊介绍

我们可以考虑用杰克逊以三种金宝搏官网188be不同的方式解析JSON:

现在,杰克逊还支持前两个XML数据。因此,让我们看看杰克逊如何帮助我们从一种格式到另一个格式的转换。

3.依赖性

首先,我们需要添加杰克逊 - 数据库依赖我们的依赖pom.xml.

<依赖项>  com.fasterxml.jackson.core   Jackson-Databind   2.11.1  

此库将允许我们使用数据绑定API。

第二是Jackson-DataFormat-XML它添加了杰克逊的XML支持:

<依赖>  com.fasterxml.jackson.dataformat   jackson-datomformat-XML   2.11.1  

4.数据绑定

数据绑定只需放置,就是当我们想要将序列化数据直接映射到Java对象时。

探索这一点,让我们定义我们的XML颜色特性

 罂粟 红色  9  

这类似于此Java表示法:

公共类花{私有字符串名称;私色颜色;私人整数花瓣;// getters和setter}公共枚举颜色{粉红色,蓝色,黄色,红色;}

我们的第一步是将XML解析为一个实例。要做到这一点,让我们创建一个实例XMLMapper.,杰克逊的XML等效物ObjectMapper.并使用它ReadValue.方法:

xmlmapper xmlmapper = new xmlmapper();Flower poppy = xmlmapper.readvalue(XML,Flower.class);

一旦我们有了我们的实例,我们希望使用熟悉的JSON将其写出来ObjectMapper.

objectMapper映射器= new objectMapper();string json = mapper.writevalueastring(poppy);

而且,我们得到了我们的JSON等效:

{“姓名”:“罂粟”,“颜色”:“红色”,“花瓣”:9}

树遍历

有时,直接在树结构上看可以提供更多的灵活性,就像我们不想维护中间类的情况一样,或者我们只想转换结构的一部分。

但是,正如我们所看到的那样,它带来了一些权衡。

第一步类似于我们使用数据绑定时的第一步。然而,这次我们将使用阅读器方法:

xmlmapper xmlmapper = new xmlmapper();jsonnode node = xmlmapper.readtree(xml.getbytes());

做到这一点,我们有一个jsonnode.有3个孩子,我们预期的:名称,颜色,花瓣

然后,我们可以再次使用ObjectMapper.,只是发送我们的jsonnode.反而:

objectMapper jsonmapper = new objectmapper();字符串JSON = JSONMAPPER.WRITEVALUEASTRING(节点);

现在,与我们的最后一个例子相比,结果略有不同:

{“姓名”:“罂粟”,“颜色”:“红色”,“花瓣”:“9”}

在仔细检查后,我们可以看到花瓣属性序列化为字符串而不是数字!这是因为阅读器没有明确定义,不推断数据类型。

5.1。限制

并且,杰克逊的XML树遍历支持有一定的限制:

  • 杰克逊无法区分对象和数组。由于XML缺乏本机结构来区分对象从对象列表中区分对象,因此jackson将重复的元素归入一个值。
  • 并且,由于杰克逊想要将每个XML元素映射到JSON节点,因此它不支持混合内容。

由于这些原因,jackson官方文档建议使用树模型来解析XML

6.内存约束

现在,这两个都具有显着的缺点,即整个XML一次需要一次以便执行转换。直到杰克逊支持将树结构流媒体为令牌,我们将被困在这个约束中,或者我们需要看看自己带来自己的东西XMLStreamReader.

7.结论

在本教程中,我们简要了解到杰克逊可以读取XML数据并将其写入JSON的不同方式。此外,我们快速了解每个支持的方法的局限性。

像往常一样,可以使用伴随教程的完整源代码在github上

杰克逊底部

使用Spring 5和Spring Boot 2开始,通过学习春天课程:

>>查看课程
评论在本文上关闭!