Android Sqite数据库 6
想來想去又坑爹了,數據保存到json中去了,如何拿出來使用了,所以這一篇又要實現和上一篇相反的過程,
將Json轉換成java各種對象:
JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一個子集。JSON采用完全獨立于語言的文本格式,但是也使用了類似于C語言家族的習慣(包括C, C++, C#, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數據交換語言。
? ?欲實現JSON字符串和java對象之間的互相轉換,方法有很多!本人層也因為項目上的需求,一度對這幾種方法做過研究和試驗!現將自己的一點小經驗分享與大家,如有紕漏,請指正!
?
? ?1.通過json_lib來實現對json和java對象之間的轉換,使用JSON-LIB可以極大的簡化JAVA對象轉換成JSON對象所需進行的操作,更可以避免人工操作生成JSON對象字符串時帶來的麻煩和誤操作:
? ?注:欲使用json_lib需要以下幾個jar包的支持:
json-lib-1.1-jdk15.jar ?下載地址:http://json-lib.sourceforge.net
? ? ? ?commons-collections-3.2.1.jar
? ? ? ?commons-lang-2.4.jar
? ? ? ?commons-logging-1.1.1.jar
? ? ? ?commons-beanutils-1.8.0.jar
? ? ? ?以上commons系列包在tomcat/comon/lib下可以找到;
? ? ? ?ezmorph-1.0.6.jar ? ?下載地址http://ezmorph.sourceforge.net
? ? ? ?morph-1.0.1 下載地址:http://morph.sourceforge.net
? ?有了這些jar包的支持,平時關于json處理的方法都可以找到對應的類;貼上一段代碼示例:
package util;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class JSONHelper {/*** 將JSONArray對象轉換成Map-List集合* @param jsonArr* @return*/public static Object JsonToList(JSONArray jsonArr){List<Object> jsonObjList = new ArrayList<Object> ();for(Object obj : jsonArr){if(obj instanceof JSONArray){jsonObjList.add(JsonToList((JSONArray) obj));} else if(obj instanceof JSONObject){jsonObjList.add(JsonToMap((JSONObject) obj));}else{jsonObjList.add(obj);}}return jsonObjList;}/*** 將JSONObjec對象轉換成Map-List集合* @param json* @return*/public static Map<String, Object> JsonToMap(JSONObject json){Map<String,Object> columnValMap = new HashMap<String,Object>();Set<Object> jsonKeys = json.keySet();for (Object key : jsonKeys) {Object JsonValObj = json.get(key);if(JsonValObj instanceof JSONArray){columnValMap.put((String)key, JsonToList((JSONArray) JsonValObj));}else if(key instanceof JSONObject){columnValMap.put((String)key, JsonToMap((JSONObject) JsonValObj));}else{columnValMap.put((String)key,JsonValObj);}}return columnValMap;}/*** 將json對象轉換為map集合,通過此方法獲取存放map集合鍵的list集合* @param obj* @return*/public static List<Object> mapKeys(Object obj){List<Object> keysList = new ArrayList<Object>();Map<String,Object> columnValMap = new HashMap<String,Object>();String columnStr = "column";if(obj instanceof JSONArray){List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>> ();jsonObjList = (List<Map<String, Object>>) JsonToList((JSONArray) obj);columnValMap =(Map<String, Object>) (jsonObjList.get(0));//以上三句可優化為如下一句//columnValMap =(Map<String, Object>)(((List<Object>)JsonToList((JSONArray) obj)).get(0)); }else if(obj instanceof JSONObject){columnValMap =JsonToMap((JSONObject) obj);}else{keysList.add(obj);}for(int i=0;i<columnValMap.keySet().size();i++){keysList.add(columnStr+(i+1));}System.out.println(keysList.size());return keysList;}}?2.通過使用谷歌的Gson來處理json字符串,谷歌的Gson針對封裝的javaBean處理起來很方便,但對于未封裝的json字符串需要找到技巧處理起來也才能順手。
? ? ? 使用谷歌的Gson當然也需要jar包的支持,這需要一個jar包:Gson.jar
? ? ? 下載地址:http://code.google.com/p/google-gson/downloads/detail?name=google-gson-2.2.4-release.zip
? ? ? ?示例:將通過js獲取的json字符串轉換為Map、List集合,代碼如下:
package util;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.google.gson.Gson;public class JSONHelper {private Gson gson = new Gson();/*** 將json對象轉換為map集合,通過此方法獲取存放map集合鍵的list集合* @param obj* @return*/public static List<Object> mapKeys(Map<?,?> map){List<Object> keysList = new ArrayList<Object>();String columnStr="column";for(int i=0;i<map.keySet().size();i++){keysList.add(columnStr+(i+1));}System.out.println(keysList.size());return keysList;} /*** 將傳入的json字符串轉換為元素為map集合的List集合* @param jsonArrStr* @return*/public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {List<Map<String, Object>> jsonObjList = new ArrayList<Map<String, Object>>();List<?> jsonList = Test.jsonToList(jsonArrStr);Gson gson = new Gson();for (Object object : jsonList) {String jsonStr = gson.toJson(object);Map<?, ?> json = Test.jsonToMap(jsonStr);jsonObjList.add((Map<String, Object>) json);}return jsonObjList;} /*** 將傳入的json字符串解析為List集合* @param jsonStr* @return*/public static List<?> jsonToList(String jsonStr) {List<?> ObjectList = null;Gson gson = new Gson();java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<List<?>>() {}.getType();ObjectList = gson.fromJson(jsonStr, type);return ObjectList;}/*** 將傳入的json字符串解析為Map集合* @param jsonStr* @return*/public static Map<?, ?> jsonToMap(String jsonStr) {Map<?, ?> ObjectMap = null;Gson gson = new Gson();java.lang.reflect.Type type = new com.google.gson.reflect.TypeToken<Map<?,?>>() {}.getType();ObjectMap = gson.fromJson(jsonStr, type);return ObjectMap;}}?3.使用最輕量級的org.json.jar實現json字符串和java對象之間的互轉
? ? ? ?所需jar包:org.json.jar
? ? ? ?下載地址:www.json.org ?或第三方:http://kiccp.sinaapp.com/store/info/111
? ? ? ?同樣實現對json字符串轉換為Map、List集合,代碼如下:
package util;import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject;/*** 此類是處理json字符串的工具類** @author xiaomeng* @since 2013-08-27**/public class JSONHelper {/*** 將json字符串轉換為List集合** @param jsonArrStr* @return*/public static List<Map<String, Object>> jsonObjList(String jsonArrStr) {List<Map<String, Object>> jsonList = new ArrayList<Map<String, Object>>();JSONArray jsonArr = null;try {jsonArr = new JSONArray(jsonArrStr);jsonList = (List<Map<String, Object>>)JSONHelper.jsonToList(jsonArr);} catch (JSONException e) {System.out.println("Json字符串轉換異常!");e.printStackTrace();}return jsonList;}/*** 將json對象的鍵值存放在集合,映射table的column** @param map* @return*/public static List<String> jsonMapKeysList(Map<?, ?> map) {List<String> jsonjsonList = new ArrayList<String>();String columnStr = "column";for (int i = 0; i < map.keySet().size(); i++) {jsonjsonList.add(columnStr + (i + 1));}System.out.println(jsonjsonList.size());return jsonjsonList;}/*** 將傳遞近來的json數組轉換為List集合** @param jsonArr* @return* @throws JSONException*/private static List<?> jsonToList(JSONArray jsonArr)throws JSONException {List<Object> jsonToMapList = new ArrayList<Object>();for (int i = 0; i < jsonArr.length(); i++) {Object object = jsonArr.get(i);if (object instanceof JSONArray) {jsonToMapList.add(JSONHelper.jsonToList((JSONArray) object));} else if (object instanceof JSONObject) {jsonToMapList.add(JSONHelper.jsonToMap((JSONObject) object));} else {jsonToMapList.add(object);}}return jsonToMapList;}/*** 將傳遞近來的json對象轉換為Map集合** @param jsonObj* @return* @throws JSONException*/@SuppressWarnings("unchecked")private static Map<String, Object> jsonToMap(JSONObject jsonObj)throws JSONException {Map<String, Object> jsonMap = new HashMap<String, Object>();Iterator<String> jsonKeys = jsonObj.keys();while (jsonKeys.hasNext()) {String jsonKey = jsonKeys.next();Object jsonValObj = jsonObj.get(jsonKey);if (jsonValObj instanceof JSONArray) {jsonMap.put(jsonKey, JSONHelper.jsonToList((JSONArray) jsonValObj));} else if (jsonValObj instanceof JSONObject) {jsonMap.put(jsonKey, JSONHelper.jsonToMap((JSONObject) jsonValObj));} else {jsonMap.put(jsonKey, jsonValObj);}}return jsonMap;}}?
以上三種常用的json和java對象之間的互相轉換方法各有其特點,根據我的小經驗,現將其優缺點總如下,供參考!
? ? 1.json_lib json解析框架
? ? ? ?優點:各種復雜json格式和對json處理的一般需求都可以做到
? ? ? ?缺點:所需支持的jar文件較多,并且關于jar包版本或許會出現一些雜七雜八的問題
? ? 2.谷歌Gson對json的解析:
? ? ? ?優點:(1)??梢怨雀璧腉son就是為處理java對象和json之間轉換開發的框架,其可以很簡單、方便的對封裝的java對象和json格式文本之間的轉換,包括java工具類集合之間的轉換也很方便;(2)。相對json_lib框架來說,只需要一個Gson.jar就可以,需要jar文件數量少;
? ? ? ?缺點:由于其相對來說偏向于處理java對象和json之間的轉換,所以其只簡單的處理json字符串和集合類之間的轉換稍微需要一個過渡,就是使用反射確定轉換的java對象類型。
? ? ?3.org.json框架
? ? ? ?優點:在這三者之中,其實最輕量級、同谷歌Gson一樣所需jar文件也是最少的一種方法,并且其在處理json字符串到java集合的轉黃相對簡便
缺點:相對Gson處理java對象和json之間的轉換比較費事
綜述:這三種解析json的方法各有優缺點,具體可根據自己需求選擇使用。
?
這個自己公司還好啦,有完整更全面的轉換類.
參考: http://mengzhengbin520.blog.51cto.com/7590564/1283361
?
下一篇還是添加以下如何轉換成xml文件.
?
?
?
?
?
?
?
?
轉載于:https://www.cnblogs.com/MMLoveMeMM/articles/3627438.html
總結
以上是生活随笔為你收集整理的Android Sqite数据库 6的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 二维数组最大子数组和
- 下一篇: android sina oauth2.