Json字符串转换为java对象的各种实现方法
作者: 发布日期:2013-08-28 10:18:13
Tag标签: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 下载地址:
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 下载地址
morph-1.0.1 下载地址:
有了这些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
下载地址:?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; } }