Java中XML到JSON的转换,两个子元素对应一个键值对

使用Java将XML转换为JSON:逐步指南

在这篇博客中,我将带你通过一个实际的示例,展示如何使用Java将XML文件转换为JSON。这在处理不同数据格式以及需要进行各种数据表示的系统集成时特别有用。

为什么要将XML转换为JSON?

XML和JSON都是流行的数据交换格式,但它们各自有不同的用途和优点:

  • XML:可扩展标记语言(XML)广泛用于定义结构化数据。它以灵活表示复杂数据结构而闻名,通常用于企业系统和配置中。
  • JSON:JavaScript对象表示法(JSON)比XML更轻量级,易于阅读和解析。它常用于Web API和现代应用程序中的数据交换。

Java代码示例

让我们深入了解一下用于处理XML到JSON转换的代码。

1. 设置Java环境

首先,确保你的项目中包含以下依赖项:

  • com.fasterxml.jackson.core:jackson-databind 用于处理JSON。
  • com.fasterxml.jackson.dataformat:jackson-dataformat-xml 用于解析XML。

如果你使用的是Maven,可以在pom.xml中添加这些依赖:

<dependencies>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.4</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-xml</artifactId>
        <version>2.13.4</version>
    </dependency>
</dependencies>
2. XML输入文件

这是一个我们将要转换的XML文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <head>
        <reqflag>1</reqflag>
    </head>
    <body>
        <ratingcode>21042024080200000019</ratingcode>
        <details>
            <detail>
                <gradeitem>name</gradeitem>
                <gradevalue>小明</gradevalue>
            </detail>
            <!-- 其他 detail 节点 -->
        </details>
    </body>
</root>

这个XML文件包含了嵌套元素,如<head><body>以及多个包含在<details>中的<detail>节点。

3. 将XML转换为JSON的Java代码

以下是读取XML文件、处理它并转换为JSON的Java代码:


import java.nio.file.Files;
import java.nio.file.Paths;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import cfca.sadk.com.itextpdf.io.IOException;

public class XMLToJsonExample {
    public static void main(String[] args) throws java.io.IOException {
        try {
            // 本地XML文件路径
            String xmlFilePath = "D:\\tmp\\your.xml";
            String xmlContent = new String(Files.readAllBytes(Paths.get(xmlFilePath)));

            // 创建XmlMapper对象
            XmlMapper xmlMapper = new XmlMapper();

            // 将XML文件解析为JsonNode对象
            JsonNode root = xmlMapper.readTree(xmlContent);

            // 获取details节点
            JsonNode details = root.path("body").path("details");

            JsonNode detailsNode = details.path("detail");
            ObjectMapper mapper = new ObjectMapper();
            ObjectNode resultNode = mapper.createObjectNode();

            // 遍历 "detail" 数组
            if (detailsNode.isArray()) {
                for (JsonNode node : detailsNode) {
                    // 获取 "gradeitem" 和 "gradevalue"
                    String key = node.path("gradeitem").asText();
                    String value = node.path("gradevalue").asText();

                    // 将其添加到结果 ObjectNode 中
                    resultNode.put(key, value);
                }

                // 打印结果 ObjectNode
                System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(resultNode));
            } else {
                System.out.println("The 'detail' node is not an array.");
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4. 代码解释
  • 读取XML文件:XML内容从文件系统中读取为字符串。

  • XmlMapper:使用XmlMapper实例将XML内容解析为JsonNode对象,这使得遍历XML结构更加容易。

  • 遍历JSON树:我们导航到JSON树中的details节点,它包含多个detail节点。

  • 迭代和映射:从每个detail节点中提取gradeitemgradevalue,并将它们作为键值对存储在ObjectNode中。

  • 输出:最后,将生成的JSON对象以格式化的形式打印出来。

5. 运行代码

运行此Java代码后,它将解析XML文件,转换details部分为JSON对象,并打印出来。以下是一个示例输出:

{
  "name": "小明",
}

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值