一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|JavaScript|易語(yǔ)言|

服務(wù)器之家 - 編程語(yǔ)言 - JAVA教程 - 解決使用json-lib包實(shí)現(xiàn)xml轉(zhuǎn)json時(shí)空值被轉(zhuǎn)為空中括號(hào)的問(wèn)題

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

2021-04-12 09:34rain_xia JAVA教程

網(wǎng)上能查到的xml轉(zhuǎn)json的jar包大部分是net.sf.json-lib,但是JSON json =xmlSerializer.read(xml); 方法會(huì)出現(xiàn)將空值轉(zhuǎn)化為[]的問(wèn)題,下面為大家提供兩種解決方法

項(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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 激情婷婷综合久久久久 | 99精品国产在现线免费 | 久久免费观看视频 | 婷婷网址 | 调教小龙女 | 无人在线视频高清免费播放 | 国产福利你懂的 | 久久国产精品永久免费网站 | 色综合色狠狠天天久久婷婷基地 | 久久久久嫩草影院精品 | 国产伦精品一区二区三区女 | 第一次处破女18分钟 | 亚洲天堂影院 | 国产日产精品久久久久快鸭 | 国产福利视频一区二区微拍 | 免费的毛片视频 | 铁牛tv 在线观看 | 国产成人99久久亚洲综合精品 | 国产精品一区二区国产 | 22sihu国产精品视频影视资讯 | 小浪妇奶真大水多 | 亚洲国产精品久久人人爱 | 黑人又大又硬又粗再深一点 | 男人天堂999 | 全彩孕交漫画福利啪啪吧 | 久久视频这有精品63在线国产 | 强行扒开美女大腿挺进 | 亚洲国产情侣偷自在线二页 | 日本精品久久久久中文字幕 1 | 视频一区 日韩 | 日本五十路六十30人8时间 | 欧美一级专区免费大片 | 久久re热在线视频精69 | 手机av影院| 18欧美同性videos可播放 | 无人区乱码区1卡2卡三卡在线 | 香蕉精品国产高清自在自线 | 狠狠操社区 | 免费在线中文字幕 | 日韩视频一区二区 | free性泰国娇小videos |