Json与Java对象互转之Gson学习

Android高手进阶 同时被 3 个专栏收录
94 篇文章 1 订阅
153 篇文章 1 订阅
13 篇文章 2 订阅

JsonJava对象互转之Gson学习


请尊重他人的劳动成果,转载请注明出处:Json与Java对象互转之Gson学习 


        我曾在《XML,Object,Json转换之浅析Xstream的使用》一文中介绍过使用XStream进行XML,Object,Json之间的转换,虽然XStream内置了对Json的支持,但是效果不是特别好,毕竟XStream重点不在Json。下面就介绍另外一种工具。

 

        Gson(又称Google Gson)是Google公司发布的一个开放源代码的Java库,主要用途为串行化Java对象为JSON字符串,或反串行化JSON字符串成Java对象。


1.如何使用Gson?

         首先从http://code.google.com/p/google-gson/downloads/list上下载Gson的jar包,然后将其导入到项目中。然后,就可以在你的项目中使用Gson了。


2.主要方法

        Gson的应用主要为toJsonfromJson两个转换方法,而在使用这种对象转换之前需先创建好对象的类以及其成员才能成功的将JSON字符串成功转换成相对应的对象。


3. Gson的应用实例

/**
 * 使用Gson实现对象,Json互转
 * @author jph
 * Date:2014.09.29
 */
public class GsonUtil {
    public static Gson gson;
    /**Json转JavaBean**/
    public static final int JSON_JAVABEAN=0x10001;
    /**Json转List<T>**/
    public static final int JSON_LIST=0x10002;
    /**Json转Map<T>**/
    public static final int JSON_MAP=0x10004;
   
    /**
     * 将对象转换成Json格式的字符串
     * @param object 要转换成Json的对象
     * @return String:Json格式的字符串
     */
    public static String convertObject2Json(Object object) {     
        gson=new Gson();           
        return gson.toJson(object);
    }  
    /**
     * 将Json转换成Java对象
     * @param inputStream 要转换成Java对象的inputStream
     * @param javaBean List获取Map中所包含的javaBean
     * @param convertFlag 转换类型标识
     * @return Object:Java对象
     */
    public static Object convertJson2Object(InputStream inputStream,Class<?>javaBean ,int convertFlag) {       
        gson=new Gson();   
        Object object=null;
//      String json=inputStream2String(inputStream);
        BufferedReader reader=intputStream2BufferedReader(inputStream);    
        Type type=getType(javaBean,convertFlag);   
        object=gson.fromJson(reader,type);         
        return object;
    }
    /**
     * 获取要转换成的对象类型
     * @param javaBean
     * @param convertFlag
     * @return
     */
    private static Type getType(Class<?> javaBean,int convertFlag) {     
        Type type=null;
        switch (convertFlag) {
        case JSON_LIST:
            if (javaBean.equals(News.class)) {//Json转List泛型
                type=new TypeToken<List<News>>(){}.getType();
            }
            break;
        case JSON_MAP:
            if (javaBean.equals(News.class)) {//Json转Map泛型
                type=new TypeToken<Map<String,News>>(){}.getType();
            }
            break;        
        case JSON_JAVABEAN://Json转JavaBean
            type=javaBean;
            break;        
        }      
        return type;  
    }
    /**
     * 将InputStream封装成BufferedReader
     * @param inputStream
     * @return
     */
    private static BufferedReader intputStream2BufferedReader(InputStream inputStream) {     
        return new BufferedReader(new InputStreamReader(inputStream));   
    }
}


代码分析:

         在将Json转换成对象的时候,上面代码是从服务器端获取输入流,然后将输入流封装成BufferedReader对象,然后通过fromJson()方法将Json转换成Java对象。

        Gson的fromJson()方法的第一个参数支持String、JsonElement和Reader类型的参数,可以根据需要进行选择。fromJson()方法的第二个参数支持Type和Class<?>类型的参数,当将Json转成JavaBean时可以使用Class<?>参数,也就是用对应JavaBean的JavaBean.calss作为第二个参数。当需要将Json转出成List泛型,Map泛型的时候需要采用TypeToken将第二个参数转换成Type类型(TypeToken是gson提供的数据类型转换器,可以支持各种数据集合类型转换。)。

  • 3
    点赞
  • 2
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象Gson里最重要的对象有2个GsonGsonBuilder Gson有2个最基本的方法 1) toJson() – 转换java 对象JSON 2) fromJson() – 转换JSONjava对象 下面是几个小例子 1. toJson() example Java 代码 收藏代码 1. class TestObjectToJson { 2. private int data1 = 100; 3. private String data2 = "hello"; 4. } 5. 6. TestObjectToJson obj = new TestObjectToJson(); 7. Gson gson = new Gson(); 8. String json = gson.toJson(obj); class TestObjectToJson { private int data1 = 100; private String data2 = "hello"; } TestObjectToJson obj = new TestObjectToJson(); Gson gson = new Gson(); String json = gson.toJson(obj); 会输出 {"data1":100,"data2":"hello"} 2. fromJson() example Java 代码 收藏代码 1. import com.google.gson.Gson; 2. 3. class TestJsonFromObject { 4. private int data1; 5. private String data2; 6. } 7. 8. String json = "{'data1':100,'data2':'hello'}"; 9. Gson gson = new Gson(); 10. TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class); import com.google.gson.Gson; class TestJsonFromObject { private int data1; private String data2; } String json = "{'data1':100,'data2':'hello'}"; Gson gson = new Gson(); TestJsonFromObject obj = gson.fromJson(json, TestJsonFromObject.class); 3. 将Java对象的属性转换成指定的JSON名字 Java 代码 收藏代码 1. import com.google.gson.FieldNamingPolicy; 2. import com.google.gson.Gson; 3. import com.google.gson.GsonBuilder; 4. import com.google.gson.annotations.SerializedName; 5. 6. public class TestGson { 7. 8. @SerializedName("first_field") 9. private String field1; 10. 11. private String secondField; 12. 13. public TestGson(String param1, String param2) { 14. field1 = param1; 15. secondField = param2; 16. } 17. } 18. 19. TestGson obj = new TestGson("aaaa", "bbbbb"); 20. Gson gson = new Gson
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

CrazyCodeBoy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值