如何把xml转成json对象,底层代码

Python017

如何把xml转成json对象,底层代码,第1张

使用json-lib的XMLSerializer对象

(1)创建XMLSerializer对象

(2)使用XMLSerializer的read(xml)方法即可

[java] view plain copy

/* 第二种方法,使用json-lib提供的方法 */

//创建 XMLSerializer对象

XMLSerializer xmlSerializer = new XMLSerializer()

//将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识)

String result = xmlSerializer.read(xml).toString()

//输出json内容

System.out.println(result)

3.测试

[java] view plain copy

public class Test {

public static void main(String[] args) {

String xml = "<class id="

+ "'1'"

+ "><student><name>aaaaaa</name><age>21</age></student><student><name>bbbbbb</name><age>22</age></student></class>"

/* 第一种方法,使用JSON-JAVA提供的方法 */

//将xml转为json

JSONObject xmlJSONObj = XML.toJSONObject(xml)

//设置缩进

String jsonPrettyPrintString = xmlJSONObj.toString(4)

//输出格式化后的json

System.out.println(jsonPrettyPrintString)

/* 第二种方法,使用json-lib提供的方法 */

//创建 XMLSerializer对象

XMLSerializer xmlSerializer = new XMLSerializer()

//将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识)

String result = xmlSerializer.read(xml).toString()

//输出json内容

System.out.println(result)

}

第一种方法输出:

[java] view plain copy

{"class": {

"id": 1,

"student": [

{

"age": 21,

"name": "aaaaaa"

},

{

"age": 22,

"name": "bbbbbb"

}

]

}}

第二种方法输出:

[java] view plain copy

{"@id":"1","student":[{"name":"aaaaaa","age":"21"},{"name":"bbbbbb","age":"22"}]}

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

}

之所以使用JSON一般是为了跳过XML这个过程,使JAVA类型到客户端的javascript类型可以不需要再解析XML就直接生成.为什么会从XML转换成json?

个人建议是通过Java解析XML,生成JavaBean或者其它类型的java对象,然后使用GSON,将java对象转化成json.GSON是google开发的一个包,小巧而功能强大,可定制性也很强,推荐使用.