中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

采用json-lib進(jìn)行Map與Json轉(zhuǎn)換

2018-07-20    來(lái)源:open-open

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬(wàn)Linux鏡像隨意使用

    Json轉(zhuǎn)換工具實(shí)在之多,最近又聽(tīng)說(shuō)FastJson對(duì)Java序列化和反序列化最優(yōu),相比 Java自帶序列化、Json-lib、Jackson等。不過(guò)本人很青睞Gson,但是好像用的人也不是很多,項(xiàng)目中用的最多的就是垃圾Json-lib了,雖然爛,但是還是的繼續(xù)使用著,因?yàn)轫?xiàng)目在我來(lái)之前已經(jīng)搭建了,不過(guò)現(xiàn)在我推薦使用Jackson,官網(wǎng)說(shuō)到這是Json工具中最快的一個(gè),當(dāng)然是有一點(diǎn)吹牛的,因?yàn)樗麤](méi)有拿數(shù)據(jù)說(shuō)話!之所以推薦Jackson,Jackson確實(shí)速度快,而且Spring內(nèi)部原生支持Jackson對(duì)Json的轉(zhuǎn)換,也就是只要我們?cè)赬ML中配置然后添加Jackson包,就大功告成了!

    對(duì)于其他的Json包,諸如simpleJson等,這些東西本人沒(méi)有什么了解,不過(guò)可以參考如下地址,看看maven倉(cāng)庫(kù)中的介紹:

Maven Repository http://mvnrepository.com/search?q=Json

    好了,不多說(shuō)了,下面開(kāi)始把本人歸納總結(jié)的Map、List 與 Json之間轉(zhuǎn)換的代碼貼上,確實(shí)很簡(jiǎn)單。

1、判斷是否滿足Json格式

    /**
	     * 該字符串可能轉(zhuǎn)為 JSONObject 或 JSONArray
	     * @param string
	     * @return
	     */
	    public static boolean mayBeJSON(String string) {
			return ((string != null) && ((("null".equals(string))
					|| ((string.startsWith("[")) && (string.endsWith("]"))) || ((string
					.startsWith("{")) && (string.endsWith("}"))))));
		}
	    
	    /**
	     * 該字符串可能轉(zhuǎn)為JSONObject
	     * @param string
	     * @return
	     */
	    public static boolean mayBeJSONObject(String string) {
			return ((string != null) && ((("null".equals(string))
					 || ((string.startsWith("{")) && (string.endsWith("}"))))));
		}
	    
	    /**
	     * 該字符串可能轉(zhuǎn)為 JSONArray
	     * @param string
	     * @return
	     */
	    public static boolean mayBeJSONArray(String string) {
			return ((string != null) && ((("null".equals(string))
					|| ((string.startsWith("[")) && (string.endsWith("]"))))));
		}


2、Json 與 Map 的轉(zhuǎn)換

 /**
	  *函數(shù)注釋:parseJSON2Map()<br>
	  *時(shí)間:2014-10-28-上午10:50:21<br>
	  *用途:該方法用于json數(shù)據(jù)轉(zhuǎn)換為<Map<String, Object>
	  *@param jsonStr
	  *@return
	  */
	    public static Map<String, Object> parseJSON2Map(String jsonStr){  
	        Map<String, Object> map = new HashMap<String, Object>();  
	        //最外層解析  
	        JSONObject json = JSONObject.fromObject(jsonStr);  
	        for(Object k : json.keySet()){  
	            Object v = json.get(k);   
	            //如果內(nèi)層還是數(shù)組的話,繼續(xù)解析  
	            if(v instanceof JSONArray){  
	                List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();  
	                Iterator<JSONObject> it = ((JSONArray)v).iterator();  
	                while(it.hasNext()){  
	                    JSONObject json2 = it.next();  
	                    list.add(parseJSON2Map(json2.toString()));  
	                }  
	                map.put(k.toString(), list);  
	            } else {  
	                map.put(k.toString(), v);  
	            }  
	        }  
	        return map;  
	    }  
	    
	    /**
              * 函數(shù)注釋:parseJSON2MapString()<br>
	      * 用途:該方法用于json數(shù)據(jù)轉(zhuǎn)換為<Map<String, String><br>
	      * 備注:***<br> 
	      */
	    public static Map<String, String> parseJSON2MapString(String jsonStr){  
	        Map<String, String> map = new HashMap<String, String>();  
	        //最外層解析  
	        JSONObject json = JSONObject.fromObject(jsonStr);  
	        for(Object k : json.keySet()){ 
	            Object v = json.get(k);   
	            if(null!=v){
	            	map.put(k.toString(), v.toString());  
	            }
	        }  
	        return map;  
	    }


3、Json 與 List  的轉(zhuǎn)換

/**
	 *函數(shù)注釋:parseJSON2List()<br>
	 *用途:該方法用于json數(shù)據(jù)轉(zhuǎn)換為L(zhǎng)ist<Map<String, Object>><br>
	 */
	 public static List<Map<String, Object>> parseJSON2List(String jsonStr){  
	        JSONArray jsonArr = JSONArray.fromObject(jsonStr);  
	        List<Map<String, Object>> list = new ArrayList<Map<String,Object>>();  
	        Iterator<JSONObject> it = jsonArr.iterator();  
	        while(it.hasNext()){  
	            JSONObject json2 = it.next();  
	            list.add(parseJSON2Map(json2.toString()));  
	        }  
	        return list;  
	    }
	 
	/**
	* 函數(shù)注釋:parseJSON2ListString()<br>
	* 用途:該方法用于json數(shù)據(jù)轉(zhuǎn)換為L(zhǎng)ist<Map<String, String>><br>
	*/
	 public static List<Map<String, String>> parseJSON2ListString(String jsonStr){  
		        JSONArray jsonArr = JSONArray.fromObject(jsonStr);  
		        List<Map<String, String>> list = new ArrayList<Map<String,String>>();  
		        Iterator<JSONObject> it = jsonArr.iterator();  
		        while(it.hasNext()){  
		            JSONObject json2 = it.next();  
		            list.add(parseJSON2MapString(json2.toString()));  
		        }  
		        return list;  
		    }


4、List 或者 Map 與 Json的轉(zhuǎn)換

JSONObject.fromObject(obj).toString();
JSONArray.fromObject(obj).toString();


5、為什么不使用 JSONObject.toBean

    我的理由是:這個(gè)方法我相信用過(guò)的人都是恨之入骨,至少我是這樣的,以前寫過(guò)一個(gè)javaBean,結(jié)果硬是要javaBean中的屬性和Json的屬性完全相同,二者轉(zhuǎn)換才不會(huì)報(bào)錯(cuò)。

6、提醒

    Json格式是要求value必須有雙引號(hào),否則就不是標(biāo)準(zhǔn)的 Json, 那么,在上面提供的方法中,假設(shè)有個(gè) Map<String,Object> 然而這個(gè)Object有可能是一個(gè)List<Map<String,Object>>,那么想要獲取里面的List對(duì)象時(shí),可千萬(wàn)不要調(diào)用parseJSON2Map,原因是他得到的值會(huì)把value中的雙引號(hào)全部去掉,那么這個(gè)結(jié)果是不符合Json規(guī)范的,后面在解析List就會(huì)出錯(cuò)。

net.sf.json.JSONException: Unquotted string


正確的做法應(yīng)該是 采用 JSONObject先解析成功JSONObject,然后再用JSONObject對(duì)象獲取List的Json字符串,然后調(diào)用上面的parseJSON2ListString,這樣就成功了!

7、提供一些Json幫助網(wǎng)站以及工具

1)Json在線校驗(yàn):http://www.bejson.com/

2)Json在線解析:火狐瀏覽器插件 json-handler 非常不錯(cuò)

3)Json-lib 所需要的jar : http://download.csdn.net/detail/wp562846864/7238979



標(biāo)簽: 代碼

版權(quán)申明:本站文章部分自網(wǎng)絡(luò),如有侵權(quán),請(qǐng)聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點(diǎn)!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請(qǐng)與原作者聯(lián)系。

上一篇:Java創(chuàng)建縮略圖的方法

下一篇:通過(guò)java代碼備份恢復(fù)mysql