解決使用json-lib包實現xml轉json時空值被轉為空白中括弧的問題,json-libjson

來源:互聯網
上載者:User

解決使用json-lib包實現xml轉json時空值被轉為空白中括弧的問題,json-libjson

項目資料庫中出現許多值為中括弧[]的資料,測試報了bug,經過排查是因為使用了json-lib 的jar包導致。json-lib在將xml字串轉換為json格式的過程中,會將空值轉化了[],現在就簡單的總結一下,兩種xml轉json包的異同。可能是因為此類問題比較初級,所以網上雖然有人提出此類問題,但是沒有發現回答。為了方便像我一樣的初級程式員能儘快的發現和解決問題,寫了這篇博文。

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

1、net.sf.json-lib 轉json;

JSON json =xmlSerializer.read(xml);

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

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

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

2、org.json 轉json :

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

不會產生[]值,但是會保留根標籤(標準XML文檔有且只有一個根標籤,所謂的根標籤就是一對<根標籤></根標籤>包含其他全部標籤),而一般根標籤對資料而言是沒有意義的,所以你如果需要做處理的話

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需去除根標籤     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轉化的json對象值時,先判斷類型是是否為string再擷取

一種是org.json

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.