Json与Java对象互转之Gson学习

Json与Java对象互转之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提供的数据类型转换器,可以支持各种数据集合类型转换。)。

时间: 2024-11-03 10:35:41

Json与Java对象互转之Gson学习的相关文章

json字符串与java对象互转

在开发过程中,经常需要和别的系统交换数据,数据交换的格式有XML.JSON等,JSON作为一个轻量级的数据格式比xml效率要高,XML需要很多的标签,这无疑占据了网络流量,JSON在这方面则做的很好,下面先看下JSON的格式, JSON可以有两种格式,一种是对象格式的,另一种是数组对象, {"name":"JSON","address":"北京市西城区","age":25}//JSON的对象格式的字符串 [

JSON和java对象的互转

先说下我自己的理解,一般而言,JSON字符串要转为java对象需要自己写一个跟JSON一模一样的实体类bean,然后用bean.class作为参数传给对应的方法,实现转化成功. 上述这种方法太麻烦了.其实有一种东西叫jsonObject可以直接不用新建实体类bean,而实现转化,先说org.json.JSONObject这个JSONObject,贴上代码: import java.beans.IntrospectionException; import java.beans.Introspect

java json字符串和对象互转

/** * Created by admin on 2017/7/26. */ public class NewPost { private String title; private String content; public NewPost(){ } public NewPost(String title,String content){ setTitle(title); setContent(content); } public String getTitle() { return ti

XML转JSON,java对象互转JSON

Test.java: package com.xml.Test; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import net.sf.json.JSON; import net.sf.json.JSONObject; import net.sf.j

json转java对象

用了平台之后很少再接触到java和js的底层代码,前几天远程帮一个萌新远程调试代码,这个萌新按照网上的教程去将json字符转java对象却一直报错.真相是它的json字符串格式不对,他的明明是一个数组,却写成一个对象,虽然用json在线校验是没错的,但是代表的含义是不一样的~~~(此处捂脸~偷笑~哈哈)所以在了解怎么转换之前一定要熟悉json的格式,我之所以写博客就是希望自己不要把以前的东西遗忘了,不希望自己的有多正规,只当这是个日记,偶尔自己看看也能和别人多多交流一下. 那么json和java

json与java对象的转换,以及struts2对json的支持,实现ajax技术

这两天学的东西有点多,今天抽个时间写下来,以此作为激励,这两天学了json,ajax,jQuery 一.使用第三方的工具java转换为json类型 首先就是java类型转换为json对象,首先要导入第三方工具包: 准备导入第三方jar包: >commons-beanutils-1.7.0.jar >commons-collections-3.1.jar >commons-lang-2.5.jar >commons-logging-1.1.1.jar >ezmorph-1.0.

JAVA里面json和java对象之间的相互转换

1. 把java 对象列表转换为json对象数组,并转为字符串 JSONArray array = JSONArray.fromObject(list);    String jsonstr = array.toString(); 2. 把java对象转换成json对象,并转化为字符串 JSONObject object = JSONObject.fromObject(user);  Log4jInit.ysulogger.debug(object.toString()); 3.把JSON字符串

JAXB:xml与java对象互转

JaxbContext生成xml文件或java类对象转化注解    JAXB提供了一个快速便捷的方式将Java对象与XML进行转换.在JAX-WS(Java的WebService规范之一)中,JDK1.6 自带的版本JAX-WS2.1,其底层支持就是JAXB.  JAXB 可以实现Java对象与XML的相互转换,在JAXB中,将一个Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal.我们可以通过在Java 类中标注注解的方式将一个Java

json串与java对象互转

Json与Bean互转,Timestamp类型的问题:http://blog.csdn.net/luckdog_hot/article/details/7880876 1)将java单个对象装换成json串 2)将java集合对象转换成json串 3:将json串装换成java单个对象 4)将json串装换成java集合对象