使用json-lib的XMLSerializer對(duì)象
成都創(chuàng)新互聯(lián)是少有的成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、營(yíng)銷型企業(yè)網(wǎng)站、微信小程序定制開發(fā)、手機(jī)APP,開發(fā)、制作、設(shè)計(jì)、友情鏈接、推廣優(yōu)化一站式服務(wù)網(wǎng)絡(luò)公司,成立于2013年,堅(jiān)持透明化,價(jià)格低,無(wú)套路經(jīng)營(yíng)理念。讓網(wǎng)頁(yè)驚喜每一位訪客多年來(lái)深受用戶好評(píng)
(1)創(chuàng)建XMLSerializer對(duì)象
(2)使用XMLSerializer的read(xml)方法即可
[java] view plain copy
/* 第二種方法,使用json-lib提供的方法 */
//創(chuàng)建 XMLSerializer對(duì)象
XMLSerializer xmlSerializer = new XMLSerializer();
//將xml轉(zhuǎn)為json(注:如果是元素的屬性,會(huì)在json里的key前加一個(gè)@標(biāo)識(shí))
String result = xmlSerializer.read(xml).toString();
//輸出json內(nèi)容
System.out.println(result);
3.測(cè)試
[java] view plain copy
public class Test {
public static void main(String[] args) {
String xml = "class id="
+ "'1'"
+ "studentnameaaaaaa/nameage21/age/studentstudentnamebbbbbb/nameage22/age/student/class";
/* 第一種方法,使用JSON-JAVA提供的方法 */
//將xml轉(zhuǎn)為json
JSONObject xmlJSONObj = XML.toJSONObject(xml);
//設(shè)置縮進(jìn)
String jsonPrettyPrintString = xmlJSONObj.toString(4);
//輸出格式化后的json
System.out.println(jsonPrettyPrintString);
/* 第二種方法,使用json-lib提供的方法 */
//創(chuàng)建 XMLSerializer對(duì)象
XMLSerializer xmlSerializer = new XMLSerializer();
//將xml轉(zhuǎn)為json(注:如果是元素的屬性,會(huì)在json里的key前加一個(gè)@標(biāo)識(shí))
String result = xmlSerializer.read(xml).toString();
//輸出json內(nèi)容
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
groupIdorg.json/groupId
artifactIdjson/artifactId
version20151123/version
/dependency
xml字符串轉(zhuǎn)換為json字符串代碼實(shí)現(xiàn)如下:
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字符串轉(zhuǎn)換為json對(duì)象代碼實(shí)現(xiàn)如下:
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
JSONObject jsonObject = null;
try{
jsonObject = JSON.parseObject(jsonString);
}catch(Exception e){
logger.error("json串轉(zhuǎn)json對(duì)象時(shí)發(fā)生異常,json串="+jsonString);
throw new RuntimeException("json串轉(zhuǎn)json對(duì)象時(shí)發(fā)生異常,json串="+jsonString,e);
}
return jsonObject;
不過(guò)org.json有個(gè)問題比較麻煩,xml如下所示:
?xml version="1.0" encoding="gb2312"?
payUnitinfo
err_msg/err_msg
retcode1/retcode
payUnits
payUnit
provinceIdv1955/provinceId
cityIdv1961/cityId
payProjectIdc2680/payProjectId
payUnitIdv96564/payUnitId
payUnitName浙江省電費(fèi)/payUnitName
/payUnit
payUnit
provinceIdv1955/provinceId
cityIdv1961/cityId
payProjectIdc2680/payProjectId
payUnitIdv85002/payUnitId
payUnitName國(guó)網(wǎng)浙江省電力公司/payUnitName
/payUnit
/payUnits
/payUnitinfo
當(dāng)xml中出現(xiàn)多個(gè)payUnit時(shí),org.json將xml中的payUnit轉(zhuǎn)換為json數(shù)組格式的字符串,當(dāng)只有一個(gè)payUnit時(shí),org.json將xml中的payUnit轉(zhuǎn)換為json對(duì)象格式的字符串。
假設(shè)jsonObject是上述xml轉(zhuǎn)換為json對(duì)象后的變量,則通過(guò)以下方式獲取:
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一般是為了跳過(guò)XML這個(gè)過(guò)程,使JAVA類型到客戶端的javascript類型可以不需要再解析XML就直接生成.為什么會(huì)從XML轉(zhuǎn)換成json?
個(gè)人建議是通過(guò)Java解析XML,生成JavaBean或者其它類型的java對(duì)象,然后使用GSON,將java對(duì)象轉(zhuǎn)化成json.GSON是google開發(fā)的一個(gè)包,小巧而功能強(qiáng)大,可定制性也很強(qiáng),推薦使用.
其實(shí)這個(gè)應(yīng)該沒有什么標(biāo)準(zhǔn)答案啦,只要寫成的格式前臺(tái)或者后臺(tái)按照這個(gè)格式解析就可以啦,比如
[{'title':'programming','price':'$4.00','name':'C++'}],
這是一條信息,如果多條就用逗號(hào)隔開如:
[{'title':'programming','price':'$4.00','name':'C++'},{'title':'programming','price':'$4.00','name':'C++'},]]
有的情況用單引號(hào)或者雙引號(hào)都可,有時(shí)只能用雙引號(hào)好像,記不清了
網(wǎng)站可以直接轉(zhuǎn):
如果是代碼中使用,可以讀取xml文件轉(zhuǎn)成對(duì)象后,再用newtonsoft.json轉(zhuǎn)成json對(duì)象