項(xiàng)目數(shù)據(jù)庫(kù)中出現(xiàn)許多值為中括號(hào)[]的數(shù)據(jù),測(cè)試報(bào)了bug,經(jīng)過(guò)排查是因?yàn)槭褂昧?a href="/article/93254.html">json-lib 的jar包導(dǎo)致。json-lib在將xml字符串轉(zhuǎn)換為json格式的過(guò)程中,會(huì)將空值轉(zhuǎn)化了[],現(xiàn)在就簡(jiǎn)單的總結(jié)一下,兩種xml轉(zhuǎn)json包的異同。可能是因?yàn)榇祟悊?wèn)題比較初級(jí),所以網(wǎng)上雖然有人提出此類問(wèn)題,但是沒(méi)有發(fā)現(xiàn)回答。為了方便像我一樣的初級(jí)程序員能盡快的發(fā)現(xiàn)和解決問(wèn)題,寫(xiě)了這篇博文。
網(wǎng)上能查到的xml轉(zhuǎn)json的jar包大部分是net.sf.json-lib,這個(gè)包在json解析方面應(yīng)用較多,但是缺點(diǎn)是需要的依賴包比較多。但是這里只講他xml轉(zhuǎn)json。
1、net.sf.json-lib 轉(zhuǎn)json;
1
|
JSON json =xmlSerializer.read(xml); |
這個(gè)方法出現(xiàn)的問(wèn)題便是會(huì)將空值轉(zhuǎn)化為[],使用 json.get(value).getclass 獲取[]的類型可以發(fā)現(xiàn):json-lib將空值識(shí)別為了jsonarray類型而不是string,而jsonarray的tostring方法被重寫(xiě)為[,,,,]
如果依然要使用這個(gè)方法,可以做如下修改,在使用getString()方法獲取由xml轉(zhuǎn)化的json對(duì)象值時(shí),先判斷類型是是否為string再獲取。
1
|
json.get(value) instanceof String ? json.getString(value): "" |
2、org.json 轉(zhuǎn)json :
1
|
org.json.JSONObject jsonObj = org.json.XML.toJSONObject(xml); |
不會(huì)生成[]值,但是會(huì)保留根標(biāo)簽(標(biāo)準(zhǔn)XML文檔有且只有一個(gè)根標(biāo)簽,所謂的根標(biāo)簽就是一對(duì)<根標(biāo)簽></根標(biāo)簽>包含其他全部標(biāo)簽),而一般根標(biāo)簽對(duì)數(shù)據(jù)而言是沒(méi)有意義的,所以你如果需要做處理的話
1
|
jsonObj.get( "root" ); |
下面是測(cè)試代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
package com.pptv.ppvision.util; import org.json.XML; import net.sf.json.JSONObject; import net.sf.json.xml.XMLSerializer; public class Xml2JsonTest { private static String xml = "<root><user><name>weless</name><sex></sex></user></root>" ; public static void main(String[] args) { testOrgJSon(); testXmlSerializer(); } public static void testOrgJSon(){ org.json.JSONObject jsonObj = XML.toJSONObject(xml); System.out.println( "org.json xml2json:" +jsonObj); org.json.JSONObject user = jsonObj.getJSONObject( "root" ).getJSONObject( "user" ); //org.json需去除根標(biāo)簽 System.out.println( "用戶名:" +user.getString( "name" )); System.out.println( "性別:" +user.getString( "sex" )); } public static void testXmlSerializer(){ XMLSerializer xmlSerializer = new XMLSerializer(); JSONObject jsonObject = (JSONObject)xmlSerializer.read(xml); System.out.println( "json-lib xml2json result: " +jsonObject); JSONObject user = jsonObject.getJSONObject( "user" ); System.out.println( "用戶名:" +user.get( "name" )); System.out.println( "性別:" +(user.get( "sex" ) instanceof String ? user.getString( "sex" ): "" )); } } |
這里為大家提供了兩種方法
一種是使用getString()方法獲取由xml轉(zhuǎn)化的json對(duì)象值時(shí),先判斷類型是是否為string再獲取
一種是org.json
大家可以根據(jù)自身需求選擇使用哪種方法
原文鏈接:http://blog.csdn.net/rain_xia_/article/details/51065135