引入的jar
xml解析使用dom4j
<!--xml解析-->
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>fastjson</artifactId>
<version>1.1.36</version>
</dependency>
1.创建xml转json工具类
package ;
import ;
import ;
import .;
import org.dom4j.*;
import ;
/**
* @ClassName XmlToJsonUtil
* @Author gxy
* @Desc xml转json
*/
public class XmlToJsonUtil {
private XmlToJsonUtil(){
}
/**
* xml转json
*
* @param xmlStr
* @return
* @throws DocumentException
*/
public static JSONObject xml2Json(String xmlStr) {
Document doc = null;
try {
doc = (xmlStr);
} catch (DocumentException e) {
();
}
JSONObject json = new JSONObject();
dom4j2Json((), json);
return json;
}
/**
* xml转json
*
* @param element
* @param json
*/
private static void dom4j2Json(Element element, JSONObject json) {
// 如果是属性
for (Object o : ()) {
Attribute attr = (Attribute) o;
if ((())) {
("@" + (), ());
}
}
List<Element> chdEl = ();
if (() && (())) {// 如果没有子元素,只有一个值
((), ());
}
for (Element e : chdEl) {// 有子元素
if (!().isEmpty()) {// 子元素也有子元素
JSONObject chdjson = new JSONObject();
dom4j2Json(e, chdjson);
Object o = (());
if (o != null) {
JSONArray jsona = null;
if (o instanceof JSONObject) {// 如果此元素已存在,则转为jsonArray
JSONObject jsono = (JSONObject) o;
(());
jsona = new JSONArray();
(jsono);
(chdjson);
}
if (o instanceof JSONArray) {
jsona = (JSONArray) o;
(chdjson);
}
((), jsona);
} else {
if (!()) {
((), chdjson);
}
}
} else {// 子元素没有子元素
for (Object o : ()) {
Attribute attr = (Attribute) o;
if ((())) {
("@" + (), ());
}
}
if (!().isEmpty()) {
((), ());
}
}
}
}
}
2.测试
xml文件
<?xml version="\"1.0\"" encoding="\"utf-8\""?>
<res>
<header>
<msgId>0000211</msgId>
<hdlSts>A</hdlSts>
<bdFlg>0</bdFlg>
</header>
<body>
<qrOvertimeFlag>Y</qrOvertimeFlag>
<orderTrans>
<tranSeq>66807478</tranSeq>
<merchantNo>104320553990088</merchantNo>
<orderNo>2439665</orderNo>
<custTranId></custTranId>
<tranCode>01</tranCode>
<tranTime>20190704134549</tranTime>
<tranAmount>0.01</tranAmount>
<tranStatus>1</tranStatus>
<unionPaySeq></unionPaySeq>
</orderTrans>
<orderTrans>
<tranSeq>66807491</tranSeq>
<merchantNo>104320553990088</merchantNo>
<orderNo>2439665</orderNo>
<custTranId>1043205539900882439665</custTranId>
<tranCode>06</tranCode>
<tranTime>20190704163313</tranTime>
<tranAmount>0.01</tranAmount>
<tranStatus>2</tranStatus>
<unionPaySeq></unionPaySeq>
</orderTrans>
<orderTrans>
<tranSeq>66807492</tranSeq>
<merchantNo>104320553990088</merchantNo>
<orderNo>2439665</orderNo>
<custTranId>1043205539900882439665</custTranId>
<tranCode>06</tranCode>
<tranTime>20190704163414</tranTime>
<tranAmount>0.01</tranAmount>
<tranStatus>2</tranStatus>
<unionPaySeq></unionPaySeq>
</orderTrans>
<orderTrans>
<tranSeq>66807495</tranSeq>
<merchantNo>104320553990088</merchantNo>
<orderNo>2439665</orderNo>
<custTranId>1043205539900882439665</custTranId>
<tranCode>06</tranCode>
<tranTime>20190705092338</tranTime>
<tranAmount>0.01</tranAmount>
<tranStatus>1</tranStatus>
<unionPaySeq></unionPaySeq>
</orderTrans>
</body>
</res>
main方法调用
public static void main(String[] args) {
String returnObj ="<?xml version=\"1.0\" encoding=\"utf-8\" ?><res><header><msgId>0000211</msgId><hdlSts>A</hdlSts><bdFlg>0</bdFlg></header><body><qrOvertimeFlag>Y</qrOvertimeFlag><orderTrans><tranSeq>66807478</tranSeq><merchantNo>104320553990088</merchantNo><orderNo>2439665</orderNo><custTranId></custTranId><tranCode>01</tranCode><tranTime>20190704134549</tranTime><tranAmount>0.01</tranAmount><tranStatus>1</tranStatus><unionPaySeq></unionPaySeq></orderTrans><orderTrans><tranSeq>66807491</tranSeq><merchantNo>104320553990088</merchantNo><orderNo>2439665</orderNo><custTranId>1043205539900882439665</custTranId><tranCode>06</tranCode><tranTime>20190704163313</tranTime><tranAmount>0.01</tranAmount><tranStatus>2</tranStatus><unionPaySeq></unionPaySeq></orderTrans><orderTrans><tranSeq>66807492</tranSeq><merchantNo>104320553990088</merchantNo><orderNo>2439665</orderNo><custTranId>1043205539900882439665</custTranId><tranCode>06</tranCode><tranTime>20190704163414</tranTime><tranAmount>0.01</tranAmount><tranStatus>2</tranStatus><unionPaySeq></unionPaySeq></orderTrans><orderTrans><tranSeq>66807495</tranSeq><merchantNo>104320553990088</merchantNo><orderNo>2439665</orderNo><custTranId>1043205539900882439665</custTranId><tranCode>06</tranCode><tranTime>20190705092338</tranTime><tranAmount>0.01</tranAmount><tranStatus>1</tranStatus><unionPaySeq></unionPaySeq></orderTrans></body></res>";
JSONObject jsonObject1 = XmlToJsonUtil.xml2Json(returnObj);
(jsonObject1);
}
3.结果
{
"header":{
"msgId":"0000211",
"hdlSts":"A",
"bdFlg":"0"
},
"body":{
"orderTrans":[
{
"tranSeq":"66807478",
"tranTime":"20190704134549",
"orderNo":"2439665",
"tranCode":"01",
"tranAmount":"0.01",
"merchantNo":"104320553990088",
"tranStatus":"1"
},
{
"tranSeq":"66807491",
"tranTime":"20190704163313",
"orderNo":"2439665",
"custTranId":"1043205539900882439665",
"tranCode":"06",
"tranAmount":"0.01",
"merchantNo":"104320553990088",
"tranStatus":"2"
},
{
"tranSeq":"66807492",
"tranTime":"20190704163414",
"orderNo":"2439665",
"custTranId":"1043205539900882439665",
"tranCode":"06",
"tranAmount":"0.01",
"merchantNo":"104320553990088",
"tranStatus":"2"
},
{
"tranSeq":"66807495",
"tranTime":"20190705092338",
"orderNo":"2439665",
"custTranId":"1043205539900882439665",
"tranCode":"06",
"tranAmount":"0.01",
"merchantNo":"104320553990088",
"tranStatus":"1"
}
],
"qrOvertimeFlag":"Y"
}
}
复杂的xml也能转成功,很棒!!!