(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开发的一个包,小巧而功能强大,可定制性也很强,推荐使用.