java xml转为json的n种方法

 更新时间:2021年08月26日 17:27:21   作者:穆晟铭  
本文给大家分享java xml转为json的两种方法,每种方法通过实例代码给大家介绍的非常详细,小编感觉第一种方法要比第二种方法好些,具体实现代码跟随小编一起看看吧

java xml转为json的两种方法

<?xml version="1.0" encoding="utf-8" ?>
<auibinsurancecallback>
<policyinfo>
<transtype>TKTS</transtype>
<eticketno>xxx</eticketno>
<flightnumber>xxx</flightnumber>
<flightdate>2019-10-16</flightdate>
<operatetime>2019-10-16 17:20:00</operatetime>
<insureno>1910161720056066735</insureno><agreeno>102160199</agreeno>
<policyno>
</policyno><policyurl>
<!--[CDATA[]]-->
</policyurl></policyinfo>
<returninfo>
<serialnumber>2019103015284949545354
</serialnumber>
<retruncode>0</retruncode><errormessage>
<!--[CDATA[xxx]]-->
</errormessage>
</returninfo>
</auibinsurancecallback>";

先来看效果,效果一:

{
  "auibinsurancecallback": {
    "returninfo": [
      {
        "retruncode": [
          "0"
        ],
        "serialnumber": [
          "2019103015284949545354"
        ]
      }
    ],
    "policyinfo": [
      {
        "operatetime": [
          "2019-10-16 17:20:00"
        ],
        "transtype": [
          "TKTS"
        ],
        "flightdate": [
          "2019-10-16"
        ],
        "insureno": [
          "1910161720056066735"
        ],
        "flightnumber": [
          "xxx"
        ],
        "agreeno": [
          "102160199"
        ],
        "eticketno": [
          "xxxx"
        ]
      }
    ]
  }
}

效果二:

{
  "auibinsurancecallback": {
    "returninfo": {
      "errormessage": "",
      "retruncode": 0,
      "serialnumber": 2.0191030152849496e+21
    },
    "policyinfo": {
      "policyurl": "",
      "operatetime": "2019-10-16 17:20:00",
      "transtype": "TKTS",
      "flightdate": "2019-10-16",
      "insureno": 1910161720056066800,
      "flightnumber": "xxx",
      "agreeno": 102160199,
      "policyno": "",
      "eticketno": xxx
    }
  }
}

从效果来看,明显是第二种方法,比第一种好。

下面把代码贴出出来

第一种实现:用到的包是fastjson, jdom2

public static JSONObject xml2JSON(byte[] xml) throws JDOMException, IOException {
        JSONObject json = new JSONObject();
        InputStream is = new ByteArrayInputStream(xml);
        SAXBuilder sb = new SAXBuilder();
        org.jdom2.Document doc = sb.build(is);
        Element root = doc.getRootElement();
        json.put(root.getName(), iterateElement(root));
        return json;
    }
 
    private static JSONObject iterateElement(Element element) {
        List node = element.getChildren();
        Element et = null;
        JSONObject obj = new JSONObject();
        List list = null;
        for (int i = 0; i < node.size(); i++) {
            list = new LinkedList();
            et = (Element) node.get(i);
            if (et.getTextTrim().equals("")) {
                if (et.getChildren().size() == 0)
                    continue;
                if (obj.containsKey(et.getName())) {
                    list = (List) obj.get(et.getName());
                }
                list.add(iterateElement(et));
                obj.put(et.getName(), list);
            } else {
                if (obj.containsKey(et.getName())) {
                    list = (List) obj.get(et.getName());
                }
                list.add(et.getTextTrim());
                obj.put(et.getName(), list);
            }
        }
        return obj;
    }
 
 @Test
    public void xml1(){
        String  xml = 上面贴的xml;
 
        JSONObject json= null;
        try {
            json = xml2JSON(xml.getBytes());
            System.out.println(json.toJSONString());
        } catch (JDOMException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
    }

第二种实现:用的org.json包,

在用org.json包的时候,需要把spring-boot-starter-test中的,android-json排除,要不然会报错:

java.lang.NoSuchMethodError: org.json.JSONTokener.<init>(Ljava/io/Reader;)V

java.lang.NoSuchMethodError: org.json.JSONObject.put(Ljava/lang/String;Ljava/util/Collection;)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>com.vaadin.external.google</groupId>
                    <artifactId>android-json</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

实现方法简单:

org.json.JSONObject xmlJSONObj = null;
       try {
           xmlJSONObj = XML.toJSONObject(xml);
           log.debug("json:" + xmlJSONObj.toString() );
       } catch (JSONException e) {
           e.printStackTrace();
       }

到此这篇关于java xml转为json的两种方法的文章就介绍到这了,更多相关java xml转json内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Boot系列教程之7步集成RabbitMQ的方法

    Spring Boot系列教程之7步集成RabbitMQ的方法

    RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用。下面这篇文章主要给大家介绍了关于Spring Boot之7步集成RabbitMQ的相关资料,需要的朋友可以参考下
    2018-11-11
  • Java利用Selenium操作浏览器的示例详解

    Java利用Selenium操作浏览器的示例详解

    本文主要介绍如何使用java代码利用Selenium操作浏览器,某些网页元素加载慢,如何操作元素就会把找不到元素的异常,此时需要设置元素等待,等待元素加载完,再操作,感兴趣的可以了解一下
    2023-01-01
  • Java实现数字连连消

    Java实现数字连连消

    这篇文章主要为大家详细介绍了Java实现数字连连消,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • java8新特性之接口默认方法示例详解

    java8新特性之接口默认方法示例详解

    这篇文章主要给大家介绍了关于java8新特性之接口默认方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用java8具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-08-08
  • JAVA动态维度笛卡尔积输出的实现

    JAVA动态维度笛卡尔积输出的实现

    本文主要介绍了JAVA动态维度笛卡尔积输出的实现,通过动态生成笛卡尔积,可以方便地处理多维数据集,提高数据处理效率,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • 基于Spring p标签和c标签注入方式

    基于Spring p标签和c标签注入方式

    这篇文章主要介绍了Spring p标签和c标签注入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot项目启动自动跳转到浏览器的操作代码

    springboot项目启动自动跳转到浏览器的操作代码

    这篇文章主要介绍了springboot项目启动自动跳转到浏览器的操作代码,本文图文实例代码相结合给大家介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • java多线程加锁以及Condition类的使用实例解析

    java多线程加锁以及Condition类的使用实例解析

    这篇文章主要介绍了java多线程加锁以及Condition类的使用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Java 常量池详解之class文件常量池 和class运行时常量池

    Java 常量池详解之class文件常量池 和class运行时常量池

    这篇文章主要介绍了Java 常量池详解之class文件常量池 和class运行时常量池,常量池主要存放两大类常量:字面量,符号引用,本文结合示例代码对java class常量池相关知识介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • java创建以任意图片为背景的窗口

    java创建以任意图片为背景的窗口

    这篇文章主要为大家详细介绍了java创建以任意图片为背景的窗口,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-12-12

最新评论