如何将xml的字符串转换为json

提问者:Joseph1991 提问时间:2017年08月30日 人气:1
推荐答案
放上maven依赖

<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20151123</version>
</dependency>

xml字符串转换为json字符串代码实现如下:

import org.json.JSONException;
import org.json.JSONObject;
import org.json.XML;

public class JsonUtils {
public static String xml2jsonString(String xml)throws JSONException{
JSONObject xmlJSONObj = XML.toJSONObject(xml);
return xmlJSONObj.toString();
}
}

json字符串转换为json对象代码实现如下:

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

JSONObject jsonObject = null;
try{
jsonObject = JSON.parseObject(jsonString);
}catch(Exception e){
logger.error("json串转json对象时发生异常,json串="+jsonString);
throw new RuntimeException("json串转json对象时发生异常,json串="+jsonString,e);
}
return jsonObject;

不过org.json有个问题比较麻烦,xml如下所示:
<?xml version="1.0" encoding="gb2312"?>
<payUnitinfo>
<err_msg></err_msg>
<retcode>1</retcode>
<payUnits>
<payUnit>
<provinceId>v1955</provinceId>
<cityId>v1961</cityId>
<payProjectId>c2680</payProjectId>
<payUnitId>v96564</payUnitId>
<payUnitName>浙江省电费</payUnitName>
</payUnit>
<payUnit>
<provinceId>v1955</provinceId>
<cityId>v1961</cityId>
<payProjectId>c2680</payProjectId>
<payUnitId>v85002</payUnitId>
<payUnitName>国网浙江省电力公司</payUnitName>
</payUnit>
</payUnits>
</payUnitinfo>

当xml中出现多个<payUnit>时,org.json将xml中的<payUnit>转换为json数组格式的字符串,当只有一个<payUnit>时,org.json将xml中的<payUnit>转换为json对象格式的字符串。
假设jsonObject是上述xml转换为json对象后的变量,则通过以下方式获取:

JSONObject payUnitsJsonObject = jsonObject.getJSONObject("payUnitinfo").getJSONObject("payUnits");

JSONObject payUnitJsonObject = null;
JSONArray payUnitJsonArray = null;
Object payUnitObject = payUnitsJsonObject.get("payUnit");
if(payUnitObject instanceof JSONObject){
payUnitJsonObject = (JSONObject)payUnitObject;
}else if(payUnitObject instanceof JSONArray){
payUnitJsonArray = (JSONArray)payUnitObject;
}