解決使用json-lib包實現(xiàn)xml轉(zhuǎn)json時空值被轉(zhuǎn)為空中括號的問題

項目數(shù)據(jù)庫中出現(xiàn)許多值為中括號[]的數(shù)據(jù),測試報了bug,經(jīng)過排查是因為使用了json-lib 的jar包導(dǎo)致。json-lib在將xml字符串轉(zhuǎn)換為json格式的過程中,會將空值轉(zhuǎn)化了[],現(xiàn)在就簡單的總結(jié)一下,兩種xml轉(zhuǎn)json包的異同??赡苁且驗榇祟悊栴}比較初級,所以網(wǎng)上雖然有人提出此類問題,但是沒有發(fā)現(xiàn)回答。為了方便像我一樣的初級程序員能盡快的發(fā)現(xiàn)和解決問題,寫了這篇博文。

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、遂寧ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的遂寧網(wǎng)站制作公司

網(wǎng)上能查到的xml轉(zhuǎn)json的jar包大部分是net.sf.json-lib,這個包在json解析方面應(yīng)用較多,但是缺點是需要的依賴包比較多。但是這里只講他xml轉(zhuǎn)json。

1、net.sf.json-lib 轉(zhuǎn)json;

JSON json =xmlSerializer.read(xml);

這個方法出現(xiàn)的問題便是會將空值轉(zhuǎn)化為[],使用 json.get(value).getclass 獲取[]的類型可以發(fā)現(xiàn):json-lib將空值識別為了jsonarray類型而不是string,而jsonarray的tostring方法被重寫為[,,,,]

如果依然要使用這個方法,可以做如下修改,在使用getString()方法獲取由xml轉(zhuǎn)化的json對象值時,先判斷類型是是否為string再獲取。

json.get(value) instanceof String ? json.getString(value):"" 

2、org.json 轉(zhuǎn)json :

org.json.JSONObject jsonObj = org.json.XML.toJSONObject(xml); 

不會生成[]值,但是會保留根標(biāo)簽(標(biāo)準XML文檔有且只有一個根標(biāo)簽,所謂的根標(biāo)簽就是一對<根標(biāo)簽></根標(biāo)簽>包含其他全部標(biāo)簽),而一般根標(biāo)簽對數(shù)據(jù)而言是沒有意義的,所以你如果需要做處理的話

jsonObj.get("root"); 

下面是測試代碼:

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對象值時,先判斷類型是是否為string再獲取

一種是org.json

大家可以根據(jù)自身需求選擇使用哪種方法

網(wǎng)站名稱:解決使用json-lib包實現(xiàn)xml轉(zhuǎn)json時空值被轉(zhuǎn)為空中括號的問題
網(wǎng)址分享:http://muchs.cn/article38/ihdssp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化定制網(wǎng)站、網(wǎng)站排名網(wǎng)站營銷、網(wǎng)站導(dǎo)航、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網(wǎng)站優(yōu)化