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框架器。