java中Array/List/Map/Object与Json互相转换详解(转载) 您所在的位置:网站首页 gsonjar下载 java中Array/List/Map/Object与Json互相转换详解(转载)

java中Array/List/Map/Object与Json互相转换详解(转载)

2024-01-19 20:27| 来源: 网络整理| 查看: 265

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处理的方法都可以找到对应的类;贴上一段代码示例:

 

 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 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 jsonObjList = new ArrayList ();          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 JsonToMap(JSONObject json){          Map columnValMap = new HashMap();          Set 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 mapKeys(Object obj){          List keysList = new ArrayList();          Map columnValMap = new HashMap();          String columnStr = "column";          if(obj instanceof JSONArray){              List jsonObjList = new ArrayList ();              jsonObjList = (List) JsonToList((JSONArray) obj);              columnValMap =(Map) (jsonObjList.get(0));              //以上三句可优化为如下一句              //columnValMap =(Map)(((List)JsonToList((JSONArray) obj)).get(0));          }else if(obj instanceof JSONObject){              columnValMap =JsonToMap((JSONObject) obj);          }else{              keysList.add(obj);          }          for(int i=0;i map) {         List jsonjsonList = new ArrayList();         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 jsonToMapList = new ArrayList();         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 jsonToMap(JSONObject jsonObj)             throws JSONException {         Map jsonMap = new HashMap();         Iterator 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)。可以谷歌的Gson就是为处理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



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有