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