採用json-lib進行Map與Json轉換

    Json轉換工具實在之多,最近又據說FastJson對Java序列化和反序列化最優,相比 Java自帶序列化、Json-lib、Jackson等。不過本人很青睞Gson,可是好像用的人也不是不少,項目中用的最多的就是垃圾Json-lib了,雖然爛,可是仍是的繼續使用着,由於項目在我來以前已經搭建了,不過如今我推薦使用Jackson,官網說到這是Json工具中最快的一個,固然是有一點吹牛的,由於他沒有拿數聽說話!之因此推薦Jackson,Jackson確實速度快,並且Spring內部原生支持Jackson對Json的轉換,也就是隻要咱們在XML中配置而後添加Jackson包,就大功告成了!具體如何操做能夠參見博客:
java

Spring MVC Rest 學習一 http://my.oschina.net/heweipo/blog/337581 json

    對於其餘的Json包,諸如simpleJson等,這些東西本人沒有什麼瞭解,不過能夠參考以下地址,看看maven倉庫中的介紹:
數組

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

    好了,很少說了,下面開始把本人概括總結的Map、List 與 Json之間轉換的代碼貼上,確實很簡單。
maven

一、判斷是否知足Json格式函數

    /**
	     * 該字符串可能轉爲 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("}"))))));
		}
	    
	    /**
	     * 該字符串可能轉爲JSONObject
	     * @param string
	     * @return
	     */
	    public static boolean mayBeJSONObject(String string) {
			return ((string != null) && ((("null".equals(string))
					 || ((string.startsWith("{")) && (string.endsWith("}"))))));
		}
	    
	    /**
	     * 該字符串可能轉爲 JSONArray
	     * @param string
	     * @return
	     */
	    public static boolean mayBeJSONArray(String string) {
			return ((string != null) && ((("null".equals(string))
					|| ((string.startsWith("[")) && (string.endsWith("]"))))));
		}

二、Json 與 Map 的轉換工具

 /**
	  *函數註釋:parseJSON2Map()<br>
	  *時間:2014-10-28-上午10:50:21<br>
	  *用途:該方法用於json數據轉換爲<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);   
	            //若是內層仍是數組的話,繼續解析  
	            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;  
	    }  
	    
	    /**
              * 函數註釋:parseJSON2MapString()<br>
	      * 用途:該方法用於json數據轉換爲<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;  
	    }

三、Json 與 List  的轉換學習

/**
	 *函數註釋:parseJSON2List()<br>
	 *用途:該方法用於json數據轉換爲List<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;  
	    }
	 
	/**
	* 函數註釋:parseJSON2ListString()<br>
	* 用途:該方法用於json數據轉換爲List<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;  
		    }

四、List 或者 Map 與 Json的轉換網站

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

五、爲何不使用 JSONObject.toBean.net

    個人理由是:這個方法我相信用過的人都是恨之入骨,至少我是這樣的,之前寫過一個javaBean,結果硬是要javaBean中的屬性和Json的屬性徹底相同,兩者轉換纔不會報錯。

六、提醒

    Json格式是要求value必須有雙引號,不然就不是標準的 Json, 那麼,在上面提供的方法中,假設有個 Map<String,Object> 然而這個Object有多是一個List<Map<String,Object>>,那麼想要獲取裏面的List對象時,可千萬不要調用parseJSON2Map,緣由是他獲得的值會把value中的雙引號所有去掉,那麼這個結果是不符合Json規範的,後面在解析List就會出錯。

net.sf.json.JSONException: Unquotted string

正確的作法應該是 採用 JSONObject先解析成功JSONObject,而後再用JSONObject對象獲取List的Json字符串,而後調用上面的parseJSON2ListString,這樣就成功了!

七、提供一些Json幫助網站以及工具

1)Json在線校驗:http://www.bejson.com/

2)Json在線解析:火狐瀏覽器插件 json-handler 很是不錯

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

相關文章
相關標籤/搜索