Gson

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)

 

 

 

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿姨不可以嘛

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值