xml字符串转换为json对象

前段时间在做一个生活缴费项目,需要调用一个第三方缴费平台的接口,这个平台是基于http请求,但是返回的内容是xml字符串。当时是想把xml字符串直接转换为对象,但是各个接口返回的内容都不同,无法转换为通用对象,只能每个接口单独转换。后来想把底层调用方法做统一封装,由业务直接调用,具体数据交由业务去判断,于是就考虑了xml字符串转换为json对象的方案。

其实这个的难点是xml字符串转换为json字符串。至于json字符串转换为json对象,阿里的fastjson已经实现。

google了很久,发现有个开源的满足需求:org.json

放上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;
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值