`
郑云飞
  • 浏览: 817398 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Json字符串转换为java对象的各种实现方法

    博客分类:
  • 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 www.it165.net
     * @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)。可以谷歌的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的方法各有优缺点,具体可根据自己需求选择使用。

  • 大小: 858.8 KB
分享到:
评论

相关推荐

    递归下降文法-Json字符串转换成Java对象

    用java实现的递归下降文法 将JSon字符串转换成Java对象 为了简单化 忽略了很多情况 仅仅作为初接触编译原理的同学们共勉 User对象有一个Teacher对象 Teacher里有一个Book对象 等等 比如 User user User json User ...

    java对象转换为json字符串或字符串数组

    除了序列化,`json-lib`还支持反序列化,即将JSON字符串转换回Java对象: ```java Person deserializedPerson = (Person) JSONSerializer.toJava(jsonString); ``` 6. JSONPath和JSONSchema: 在实际应用中,...

    Java中Json字符串直接转换为对象的方法(包括多层List集合)

    接下来,我们看一段示例代码,演示如何将JSON字符串转换为包含多层List集合的Java对象。这里假设我们有一个天气查询的API返回的JSON响应,其中包含城市列表,每个城市又有指数和天气数据等信息: ```java // 将JSON...

    解析Json字符串直接转换为对象(包括多层List集合 嵌套)所用jar包

    标题和描述提及的是将JSON字符串转换为Java对象,特别是涉及多层嵌套和List集合的情况。这在处理复杂数据结构时非常常见,比如服务器返回的响应可能包含嵌套的对象和数组。下面我们将详细介绍如何使用Jackson库来...

    使用json-lib将java对象转换成json字符串

    JSON字符串到Java对象的转换通常通过反序列化实现,而Java对象到JSON字符串的转换则称为序列化。 - json-lib库提供了一套API,使得这种转换变得简单。例如,使用`net.sf.json.JSONObject.fromObject()`方法可以将...

    JSON 字符串 与 java 对象的转换

    // 把JSON字符串转换为JAVA对象数组 JSONArray json = JSONArray.fromObject(personStr); List&lt;InvoidPerson&gt; persons = (List) JSONArray.toCollection(json, InvoidPerson.class); ``` #### 4. JSON字符串转换为...

    利用java反射将json字符串转成对象.zip

    在给定的“利用java反射将json字符串转成对象”的主题中,我们将深入探讨如何借助反射机制将JSON字符串转换为Java对象。 首先,我们需要了解JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人...

    JSON字符串和java对象的相互转换

    总的来说,JSON字符串与Java对象之间的转换是Java开发中的基础技能,熟练掌握各种转换方法和库的使用,能够极大地提高开发效率。在实际工作中,我们还需要考虑异常处理、数据验证以及性能优化等问题。

    利用Google Gson实现JSON字符串和对象之间相互转换

    以下是一个简单的例子,展示如何将JSON字符串转换为Java对象: ```java class User { private String name; private int age; // getters and setters... } String jsonString = "{\"name\":\"John\", \"age\...

    json字符串转换插件

    通过这种方式,你可以使用`JsonUtils.jsonToJavaObject()`方法将JSON字符串转换为任意指定类型的Java对象,而`JsonUtils.javaObjectToJson()`则将Java对象转换为JSON字符串。 总之,JSON字符串转换插件是Java开发中...

    模仿json,根据对象生成json字符串,根据字符串生成对象

    同样以`com.google.gson`为例,我们可以使用`fromJson()`方法将JSON字符串转换回Java对象。在上面的例子中,如果我们已经有一个JSON字符串,可以这样做: ```java String jsonString = "{\"name\":\"Alice\",\"age\...

    json 字符串转java对象,java对象转json字符串

    自己有空时用java反射写的json转化工具,有不完善之处,多包涵

    Json对象与json字符串互相转换处理工具

    Json对象与json字符串互相转换处理工具

    json字符串转化为list泛型

    在Java编程中,我们经常需要将JSON格式的数据转换为Java对象,这通常涉及到将JSON字符串转化为List泛型。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和...

    java转json串的几种方法

    以下我们将详细探讨Java中将对象转换为JSON字符串的三种方法,这里使用的是阿里巴巴的Fastjson库,它是一个高性能的JSON库,提供了丰富的API来处理JSON与Java对象之间的转换。 1. **将Java对象转成JSON串** 当我们...

    忽略字段的首字母大小写,将json字符串转成javabean对象

    忽略字段的首字母大小写,将json字符串转成javabean对象,解决Java对象中属性中首字母大写而取不到值(取到的值为空)的问题 忽略字段的首字母大小写,将json字符串转成List,解决Java对象中属性中首字母大写而取不...

    js json字符串转对象

    本文主要关注如何将JSON字符串转换为JavaScript对象。 1. **JSON.stringify() 和 JSON.parse()** `JSON.stringify()` 是JavaScript提供的一个内置函数,用于将JavaScript对象转换为JSON字符串。这在需要在网络间...

    Java中Json字符串与各种对象互转

    可以处理简单java对象和格式正确的json字符串互相转换。 net.sf.json.JSONArray可以处理复杂的java集合对象和格式正确的json字符串互相转换. 1.json字符串转简单java对象 2.简单java对象转json字符串 3.json字符...

    Json与java对象之间相互转换源码

    Gson是Google提供的一个Java库,可以将Java对象转换为JSON字符串,反之亦然。首先,需要在项目中引入Gson库,然后可以使用以下方法进行转换: 将Java对象转换为JSON字符串: ```java Gson gson = new Gson(); ...

    json格式与java类对象相互转换

    2. 使用Jackson库的`ObjectMapper`类,我们可以将JSON字符串转换为User对象: ```java String jsonString = "{\"id\":1,\"name\":\"John\",\"email\":\"john@example.com\"}"; ObjectMapper mapper = new ...

Global site tag (gtag.js) - Google Analytics