精华内容
下载资源
问答
  • Gson

    千次阅读 2018-04-24 08:08:02
    GSON是Google开发的Java API,用于转换Java对象和Json对象。 引用这个主要为了减少格式错误导致程序异常。 gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化...

    GSON是Google开发的Java API,用于转换Java对象和Json对象。

    引用这个主要为了减少格式错误导致程序异常。

    gson和其他现有java json类库最大的不同时gson需要序列化得实体类不需要使用annotation来标识需要序列化得字段,同时gson又可以通过使用annotation来灵活配置需要序列化的字段。

     

    一、添加依赖

    添加Google的GSON包 这里记得是在Android Studio中写的 Gradle构建的

    compile 'com.google.code.gson:gson:2.6.2'
    gson = new GsonBuilder()  
                       .setLenient()// json宽松  
                       .enableComplexMapKeySerialization()//支持Map的key为复杂对象的形式  
                       .serializeNulls() //智能null  
                       .setPrettyPrinting()// 调教格式  
                       .disableHtmlEscaping() //默认是GSON把HTML 转义的  
                       .create(); 

     

    二、Gson高级使用

    GsonBuilder

    这里主要用到 将对象转成json字符串 记得当时手机端查询自身sqlite数据库,然后将结果拼成字符串传递给后台服务器。后台解析json,获取结果。

    对象中存在null的情况,同样在字符串中体现出来。

                    Gson gson = new Gson();
    
                    //查询每个表 返回需要的json字符串
                    //CRM_PRO_DT
    
                    CRM_PRO_DT model = new CRM_PRO_DT();
                    CRM_PRO_DT_Dao dao = new CRM_PRO_DT_Dao(getActivity());
                    List<CRM_PRO_DT> list = new ArrayList<CRM_PRO_DT>();
                    list = dao.queryForEq("ID", SB_ID);
                    if (list.size() != 0) {
    
                        model.setCCBH(list.get(0).getCCBH() == null ? "" : list.get(0).getCCBH());
                        model.setZZRQ(list.get(0).getZZRQ() == null ? "" : list.get(0).getZZRQ());
                        model.setKZFS(list.get(0).getKZFS() == null ? "" : list.get(0).getKZFS());
                        model.setSBSYDD(list.get(0).getSBSYDD() == null ? "" : list.get(0).getSBSYDD());
    
    
                        HashMap<String, Object> map = new HashMap<String, Object>();
                        map.put("CCBH", list.get(0).getCCBH() == null ? "" : list.get(0).getCCBH());
                        map.put("ZCDM", null);
    
                        String jsonstr = gson.toJson(map);
    
                        GsonBuilder gsonBuilder = new GsonBuilder();
    
    
                        //null也序列化出来
                        String jsonstr2 = gsonBuilder.serializeNulls().create().toJson(map);
                        String jsonstr3 = gsonBuilder.serializeNulls().create().toJson(model);
    
                        //想序列化谁就序列化谁(没有@Expose注释的属性将不会被序列化.。)
                        String jsonstr4 = gsonBuilder.excludeFieldsWithoutExposeAnnotation().create().toJson(model);
    
    
                    }
    @Expose //(标有注解 才序列化)
        @DatabaseField(columnName = "CCBH")
        private String CCBH;

     

    三、拼接json字符串

    Gson直接解析HashMap拼接json

    Gson gson = new GsonBuilder().serializeNulls().create();
                        HashMap<String, Object> map = new HashMap<>();
                        map.put("ID",list.get(i).getMYID());
                        map.put("JYLB",list.get(i).getJYLB());
                        map.put("YJ",list.get(i).getYJ());
                        map.put("EJ",list.get(i).getEJ());
                        map.put("SJ",list.get(i).getSJ());
                        map.put("SEQ",list.get(i).getSEQ());
                        map.put("SEQ_JL",list.get(i).getSEQ_JL());
    
                        map.put("JYJG","符合");
                        map.put("SHUJU", null);
    
    //                    json += gsonBuilder.serializeNulls().create().toJson(map) + ",";
                        json += gson.toJson(map) + ",";

     

     

     

    四、Gson解析 array数组

    1、array数组举例:

    [{"ID":1,"JYLB":"A","YJ":"1技术资料","EJ":"1.1制造资料","SJ":"液压电梯制造单位提供了以下用中文描述的出厂随机文件:(1)制造许可证明文件;","SEQ":1,"SEQ_JL":1,"JYJG":"符合","SHUJU":null},{"ID":1,"JYLB":"A","YJ":"1技术资料","EJ":"1.1制造资料","SJ":"液压电梯制造单位提供了以下用中文描述的出厂随机文件:(1)制造许可证明文件;","SEQ":1,"SEQ_JL":1,"JYJG":"符合","SHUJU":null}]

    2、主要代码

    首先创建model,然后将json数据转为对象,直接操作对象,不用去考虑类型转换。

     

    fromJson方法就是下面这个方法,将一个Json数据转换为对象。

    提供两个参数,分别是json字符串以及需要转换成对象的类型。

     new TypeToken<List<City>>(){}.getType()  就是说要把Json数据转换成List<City>类型的结果。

            Gson gson=new Gson();  
      
            List<City> rs=new ArrayList<City>();  
      
            Type type = new TypeToken<ArrayList<City>>() {}.getType();  
      
            rs=gson.fromJson(str, type);  

     

     

    基本的json解析,需要考虑类型的转换,而gosn创建model的时候已经考虑进去了。

            // 解析json数组
    		JSONArray array = new JSONArray(str);
    		for (int i = 0; i < array.length(); i++) {
    			JSONObject object = (JSONObject) array.get(i);
    
    			Double positive_prob = (Double) object.get("positive_prob");
    
    			System.out.println("positive_prob:" + positive_prob);
    		}

    因为获取到的数据类型不确定,这种方法很容易出现类型转换错误。

    Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double
    	at com.baidu.ai.Sample.main(Sample.java:98)

     

     

     

    展开全文
  • gson

    2019-09-16 17:04:42
    解析JSON数据: import com.google.gson.Gson;...Gson gson=new Gson(); info = gson.fromJson(result, XXXX.class); 下载地址: 链接: https://pan.baidu.com/s/1NIpp_0tp3LX_S1FP1GhWMQ 提取码: qke4 ...

    解析JSON数据:

    import com.google.gson.Gson;

    Gson gson=new Gson();
                info = gson.fromJson(result, XXXX.class);

    下载地址:

    链接: https://pan.baidu.com/s/1NIpp_0tp3LX_S1FP1GhWMQ 提取码: qke4

    展开全文
  • GSON

    2016-08-11 19:54:27
    GSON.GSON 需要用创建gson对象来进行解析。而fastJSON是静态方法用类对象来解析。 Gson gson = new Gson(); Weather weather = gson.fromJson(str, Weather.class); System.out.println(weather.getResult()); 如果...

    GSON.

    GSON 需要用创建gson对象来进行解析。而fastJSON是静态方法用类对象来解析。

     Gson gson = new Gson();
    Weather weather = gson.fromJson(str, Weather.class);
    System.out.println(weather.getResult());
    

    如果遇到{ 1000: 一万} ## 添加注解。

    @SerializedName(“10000”)
    private String text;

    如果对版本进行要求。

    在属性前面加注解,

      @Since(1.1)
      @Until(1.2)
      private int error_code;
    

    创建gson对象

    Gson gson = new GsonBuilder().setVersion(1.1).create();
    Weather weather = gson.fromJson(str, Weather.class);
    System.out.println(weather.getResult());
    

    属性的版本包含在创建对象设置的版本时属性才可用。

    如果遇到{ location :[ 50, 100]}

    直接定义 private int[] location;

    如果有Canlendar属性,需要自定义适配器。

    写个类继承 extends TypeAdapter<> 。
    属性前加注解

    @JsonAdapter(CalnlendarTypeAdapter.class)
    private Calendar time;
    

    适配器

    public class CalnlendarTypeAdapter extends TypeAdapter<Calendar> {
        @Override
        public void write(JsonWriter jsonWriter, Calendar calendar) throws IOException {
            if (calendar == null) {
                jsonWriter.nullValue();
            } else {
                jsonWriter.value(calendar.getTimeInMillis());
            }
        }
    
        @Override
        public Calendar read(JsonReader jsonReader) throws IOException {
            if (jsonReader.hasNext()) {
                long l = jsonReader.nextLong();
                Calendar instance = Calendar.getInstance();
                instance.setTimeInMillis(l);
                return instance;
            }
            return null;
        }
    }
    

    将对象转化成JSON型数据

     String s = gson.toJson(weather);
    
    展开全文
  • Gson基本用法

    万次阅读 多人点赞 2018-05-12 14:25:03
    Gson是谷歌官方推出的支持 JSON -- Java Object 相互转换的 Java序列化/反序列化 库,之前由于没有用过,所以学习一下。 1. 导入Android Studio工程 dependencies { implementation '...

    Gson是谷歌官方推出的支持 JSON -- Java Object 相互转换的 Java序列化/反序列化 库,之前由于没有用过,所以学习一下。

    1. 导入Android Studio工程

    dependencies {
        implementation 'com.google.code.gson:gson:2.8.4'
    }
    

    2. 简单的 Java Object 序列化/反序列化

    序列化

    假如有一个User类,拥有 name, email, age, isDeveloper 四个属性,如下:

    User userObject = new User(  
        "Norman", 
        "norman@futurestud.io", 
        26, 
        true
    );
    

    使用Gson将它序列化:

    Gson gson = new Gson();
    String userJson = gson.toJson(userObject);
    

    得到的结果如下:

    {
    	"isDeveloper":true,
    	"name":"Norman",
    	"age":26,
    	"email":"norman@futurestud.io"
    }
    

    反序列化

    先定义一段JSON字符串

    String userJson = "{'isDeveloper':false,'name':'xiaoqiang','age':26,'email':'578570174@qq.com'}";
    

    Gson反序列化

    User user = gson.fromJson(userJson, User.class);
    

    debug一下,查看结果
    这里写图片描述
    反序列化成功!

    3. 嵌套 Java Object 的序列化/反序列化

    也就是说,一个类里面还包含有其它类。比如User类里面还有个用户地址UserAddress类,JSON结构如下:

    {
        "age": 26,
        "email": "578570174@qq.com",
        "isDeveloper": true,
        "name": "chenrenxiang",
    
        "userAddress": {
            "city": "Magdeburg",
            "country": "Germany",
            "houseNumber": "42A",
            "street": "Main Street"
        }
    }
    

    那么这种Java Object该如何序列化/反序列化呢?和上面一样。也就是说和 2 里面介绍的方法一样


    4. Array 和 List 的序列化/反序列化

    序列化
    序列化和前面介绍的方法是一样的

    反序列化
    那就有些不同了,不然也不用分开写。

    1 Array的反序列化
    先假设有一个name数组,定义JSON格式如下:

    String namesJson = "['xiaoqiang','chenrenxiang','hahaha']";
    

    然后使用Gson去反序列化它:

    Gson gson = new Gson();
    String[] nameArray = gson.fromJson(namesJson, String[].class);
    

    得到的nameArray如下:
    这里写图片描述
    其实这和 2 里面介绍的反序列化方法仍然是一样的。可以看到,Gson的反序列化都是调用 Gson.fromJson(...)方法,传入JSON字符串,以及这段JSON字符串对应的Object类型。

    2 List的反序列化

    String userJson = "[{'isDeveloper':false,'name':'xiaoqiang','age':26,'email':'578570174@qq.com'},{'isDeveloper':true,'name':'xiaoqiang123','age':27,'email':'578570174@gmail.com'}]";
    
    Gson gson = new Gson();
    Type userListType = new TypeToken<ArrayList<User>>(){}.getType();
    
    List<User> userList = gson.fromJson(userJson, userListType); 
    

    对于List,反序列化时必须提供它的Type,通过Gson提供的TypeToken<T>.getType()方法可以定义当前List的Type。反序列化后结果如下:

    这里写图片描述

    那么,如果一个Java Object里包含List类型的变量,该如何反序列化这个Object呢?答案是,和 2 一样就行了,无需为其内部的List提供Type

    5. Map 和 Set 的序列化/反序列化

    Map我平时用的较多,Set用的就很少了,它们的序列化/反序列化方法和List都是一样的,反序列化的时候需要提供Type

    6. 变量值为null时的序列化/反序列化

    仍然以User类为例,如果一个User对象,里面的某个值为null,那么其序列化出来后的结果会是什么样的呢?

    先看序列化,我们先初始化一个User对象,并把其中的email变量赋值为null,再用Gson来序列化它,如下:

        User user = new User(true, "chenrenxiang", 27, null);
        Gson gson = new Gson();
        String userJson = gson.toJson(user);
    

    debug一下,得到结果如下:
    这里写图片描述

    可见,当某个变量值为null时,Gson在序列化的时候直接把这个变量忽略了。

    再来看下反序列化, 先定义一段JSON字符串,只给它一个变量值name,用User类来反序列化它,看得到的结果会是什么。

       String userJson = "{'name':'xiaoqiang'}";
       Gson gson = new Gson();
       User user = gson.fromJson(userJson, User.class);
    

    这里写图片描述
    对于JSON字符串里没有的变量,Gson在反序列化时会给它一个默认值,int类型默认为0,bool类型默认为false,String类型默认为null。

    有人不禁要问了,如果JSON字符串里某个变量的值为null,反序列化后的结果会是什么呢?我测试过了,和没有的结果是一样的。

    7. 控制序列化/反序列化 的变量名称

    仍然以User对象为例,目前User对象里有四个变量nameageemailisDeveloper。假如,某一天,JSON字符串的变量名name变成了fullName,无需紧张,我们不用把User类里的变量name改为fullName,然后把它的getset方法都改了,然后把用到get/set方法的地方全改过来。只需要用Gson提供的注解方法@SerializedName就行了,如下:

    public class User {
        private boolean isDeveloper;
        @SerializedName("fullName")
        private String name;
        private int age;
        private String email;
        ...
    }
    

    这样虽然JSON字符串里的变量名为fullName,但是反序列化后fullName的值会映射给name。同样,把一个User对象序列化,变量name会自动转换为fullName

    然而现实远比想象中复杂,这个JSON有时候传的是fullName,有时候传的是name,这时该怎么办呢? 不用担心,@SerializedName 接受两个参数,valuealternate ,顾名思义,alternate 是备选变量名,比如下面这段代码:

    public class User {
        private boolean isDeveloper;
        @SerializedName(value = "name", alternate = "fullName")
        private String name;
        private int age;
        private String email;
        ...
    }
    

    如果JSON传的是name,那么就用name的值,如果传的是fullName,那么就用fullName的值。需要注意的是,alternate只是反序列化JSON的一个备选变量名,它不会影响序列化,User对象序列化后,会使用value定义的名称为变量名。

    又想到有一个问题,在定义了value和alternate的情况下,假如JSON同时传来了name和fullName,User的name变量会接受哪个值呢? 经过测试,它会都接受。这样也是很合理的,因为Gson会对JSON中的变量一个一个地去解析,既然它可以接受name,也可以接受fullName,那么当同时传来这两个变量时,它就会分别把它们解析出来,并把值赋给User对象中的name变量。那么,name变量的值就会是后解析的那个JSON变量的值,因为它会把前一个值覆盖掉。

    8. 序列化/反序列化过程中忽略某些变量

    也许会出现这样的需求,在将某个对象序列化时,对象中的某些变量是不需要的。有可能在反序列化某个JSON字符串时,某些变量的值也是不需要的。这时就可以使用Gson提供的@Expose注解方法。使用方法如下:

    public class User {  
        @Expose()
        String name; // 参与序列化/反序列化
    
        @Expose(serialize = false, deserialize = false)
        String email; // 不参与序列化,也不参与反序列化
    
        @Expose(serialize = false)
        int age; // 只参与反序列化
    
        @Expose(deserialize = false)
        boolean isDeveloper; // 只参与序列化
    }
    

    使用这个方法,可以非常灵活地控制对象的某个/某些变量参不参与序列化/反序列化

    然而! 要使用这个注解来控制序列化/反序列化,就不能使用默认的Gson对象,新建Gson对象的方法如下:

    GsonBuilder builder = new GsonBuilder();  
    builder.excludeFieldsWithoutExposeAnnotation();  
    Gson gson = builder.create(); 
    

    注意:使用以上方式构建的Gson,在序列化/反序列化对象时,会排除所有没有添加@Expose注解的字段。

    另一个选择transient关键字 ,使用这个关键字,可以直接让变量不参与序列化/反序列化,如下:

    public class User {  
        String name;
        String email;
        int age;
        boolean transient isDeveloper; //不参与序列化/反序列化
    }
    

    当然,使用默认的Gson对象就可以。


    以上是这两天学到的Gson的基本用法,如果想进一步了解,可以参考Future Studio的 Gson教程

    展开全文
  • gson gson gson

    2017-11-17 22:05:31
    gson2.6.2,含有使用的api,含有源代码,含有jar包gson2.6.2,含有使用的api,含有源代码,含有jar包
  • Gson 解析教程

    万次阅读 多人点赞 2016-05-18 13:43:38
    Gson 是google解析Json的一个开源框架,同类的框架fastJson,JackJson等等 本人fastJson用了两年,也是从去年才开始接触Gson,希望下面的总结会对博友有用,至于Gson与FastJson的对比,其实半斤八两的问题,不再赘述 第一...
  • Gson 2.3.1

    千次下载 热门讨论 2014-11-28 02:21:25
    gson最新版本gson2.3.1。源码、文档、开发包一应俱全!
  • om.google.code.gson/gson/2.6.2 Gson maven依赖 java 开发包
  • gson 2.8.0

    2019-07-23 10:29:02
    GSON完整包,包含三个jar包。 gson-2.8.0.jar GSON生成解析json数据的基本jar包; gson-2.8.0-javadoc.jar GSON API介绍文档包; gson-2.8.0-sources.jar
  • Gson.jar gson-2.7.jar GSON jar包 gson需要的所有jar,这是自己用的,保证稳定可用,现在分享给大家啦~~~欢迎下载讨论!
  • com.google.gson.Gson 2.8.1 2.8.2 jar包 gson,直接解压到maven仓库,或者提取里面的jar包都可以使用
  • Instant GSON

    2018-10-16 05:30:57
    手工排版。 GSON is a specialized Java-based library for handling JSON data, developed by Google.
  • gson 2.8.2

    2018-07-26 11:34:52
    gson2.82 jar包,使用goson解析的朋友看过来,拿去不谢
  • gson fastjson

    2016-04-22 17:55:03
    gson 解析json fast
  • gson-2.2.1_gson-2.2.1_源码

    2021-10-04 05:11:44
    gson用到的jar包,修改后缀名后,导入工程即可使用
  • gson工具类

    2018-01-17 09:31:23
    gson
  • ext-gson是及更高版本的简单扩展库,其中包括以下库的一些扩展: 有一天可能会添加新的库。 可能是。 要求 构建:Java 8和Apache Maven。 使用:Java 6,Java 7或Java 8(取决于组件)。 没有捆绑或计划捆绑ext-...
  • gson api and gson2.2.4 jar

    2015-01-20 16:22:23
    里面有gson的文档,gson2.2.4的jar,需要的请下载!

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 85,037
精华内容 34,014
关键字:

gson