XML转换JSON格式

XML转换JSON格式

很简单的使用!!!!导入一个工具类就可以用了,耐心看完!!!使用一个工具类就可以了!!!

例如:微信的回调信息为一个xml需要获取其中的某个节点的值:

<xml> 
  <ToUserName><![CDATA[gh_4d00ed8d6399]]></ToUserName>  
  <FromUserName><![CDATA[oV5CrjpxgaGXNHIQigzNlgLTnwic]]></FromUserName>  
  <CreateTime>1481013459</CreateTime>  
  <MsgType><![CDATA[event]]></MsgType>  
  <Event><![CDATA[MASSSENDJOBFINISH]]></Event>  
  <MsgID>1000001625</MsgID>  
  <Status><![CDATA[err(30003)]]></Status>  
  <TotalCount>0</TotalCount>  
  <FilterCount>0</FilterCount>  
  <SentCount>0</SentCount>  
  <ErrorCount>0</ErrorCount>  
  <CopyrightCheckResult> 
    <Count>2</Count>  
    <ResultList> 
      <item> 
        <ArticleIdx>1</ArticleIdx>  
        <UserDeclareState>0</UserDeclareState>  
        <AuditState>2</AuditState>  
        <OriginalArticleUrl><![CDATA[Url_1]]></OriginalArticleUrl>  
        <OriginalArticleType>1</OriginalArticleType>  
        <CanReprint>1</CanReprint>  
        <NeedReplaceContent>1</NeedReplaceContent>  
        <NeedShowReprintSource>1</NeedShowReprintSource> 
      </item>  
      <item> 
        <ArticleIdx>2</ArticleIdx>  
        <UserDeclareState>0</UserDeclareState>  
        <AuditState>2</AuditState>  
        <OriginalArticleUrl><![CDATA[Url_2]]></OriginalArticleUrl>  
        <OriginalArticleType>1</OriginalArticleType>  
        <CanReprint>1</CanReprint>  
        <NeedReplaceContent>1</NeedReplaceContent>  
        <NeedShowReprintSource>1</NeedShowReprintSource> 
      </item> 
    </ResultList>  
    <CheckState>2</CheckState> 
  </CopyrightCheckResult> 
  <ArticleUrlResult>
     <Count>1</Count>
     <ResultList>
       <item>
         <ArticleIdx>1</ArticleIdx>
         <ArticleUrl><![CDATA[Url]]></ArticleUrl>
       </item>
     </ResultList>
  </ArticleUrlResult>
</xml>

1、修改pom文件导入相关依赖dom4j、org.json。

<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20180130</version>
</dependency>

2、创建工具类

工具类使用的是org.json,这里我将返回值变成了alibaba的fastJson格式,个人习惯。

package org.jeecg.modules.common.util;


import java.io.IOException;
import java.io.StringWriter;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

public class XmlToJson {

    /**
     * 传入字符串格式的xml
     * 将xml格式<a/>装换成<a></a>
     * 再将xml装换成属性没有带"@"的JSONObject格式
     * */
    public static com.alibaba.fastjson.JSONObject convertXmlIntoJSONObject (String xml){
        JSONObject jsonObject=new JSONObject();
        try {
            Document xmlDocument = DocumentHelper.parseText(xml);
            OutputFormat format = new OutputFormat();
            format.setEncoding("UTF-8");
            format.setExpandEmptyElements(true);
            StringWriter out = new StringWriter();
            XMLWriter writer = new XMLWriter(out, format);
            try {
                writer.write(xmlDocument);
                writer.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }
            //out.toString() 此结果为xml的<a></a>格式
            jsonObject= XML.toJSONObject(out.toString());
        } catch (DocumentException e1) {
            e1.printStackTrace();
        } catch (JSONException e) {
            e.printStackTrace();
        }

        //结果做了一次封装返回的结果为阿里巴巴的fastjson 个人习惯。
        return com.alibaba.fastjson.JSONObject.parseObject(jsonObject.toString());
    }
}

3、示例使用

这里的参数body就是上面的xml文件,输出结果为xml中ArticleUrl节点中的值:“Url”

    /** 微信公众号回调的方法*/
    @Override
    public String shareTestCallBack(String body) {
        
        if (redisUtil.hasKey(uid + itemCode)) {
            return redisUtil.get(uid + itemCode).toString();
        }
        
        JSONObject xmlStrObj = XmlToJson.convertXmlIntoJSONObject(body);
        String articleUrl = JSONObject.parseObject(JSONObject.parseObject(JSONObject.parseObject(JSONObject.parseObject(xmlStrObj
                .getString("xml"))
                .getString("ArticleUrlResult"))
                .getString("ResultList"))
                .getString("item"))
                .getString("ArticleUrl");

        redisUtil.set(uid + itemCode, articleUrl);
        return articleUrl;
    }

本方法适用快速解析xml,项目对xml依赖性大的话不建议使用,可以去看一下dom4j或者Xstream 相关的xml框架器。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值