精华内容
参与话题
问答
  • 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

    2017-08-28 14:48:13
    GSON Json 介绍 Json 全称 JavaScript Object Natation ,用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于 服务端 与 客户端 的数据交互。 格式 Json 以 key-value的形式存储...
    GSON
    
    
    Json 介绍
    Json 全称 JavaScript Object Natation ,用来描述数据结构,它是基于纯文本的数据格式,是一种轻量级的数据交换格式。广泛应用于 服务端 与 客户端 的数据交互。
    格式
    Json 以 key-value的形式存储数据;
    Key的取值 为 String 类型;
    Value的取值 为 String,boolean,Number,数组,Object,null;
    Json 串 以 { 开始, 以 } 结尾;
    Json 串中 数组 是 以 [ 开始, 以 ] 结尾;
    Json 串中 Object 是 以 { 开始, 以 } 结尾;
    案例
    基本类型 :
    {
        "name": "张三",
        "age": 18,
        "sex": true
    }
    数组类型 :
    [               
            {
                "name": "张三",
                "age": 18,
                "sex": true
            },
            {
                "name": "李四",
                "age": 19,
                "sex": false
            }
    ]
    对象嵌套 :
    {
        "name": "teacher",
        "computer": {
            "CPU": "intel7",
            "disk": "512G"
        },
        "students": [
            {
                "name": "张三",
                "age": 18,
                "sex": true
            },
            {
                "name": "李四",
                "age": 19,
                "sex": false
            }
        ]
    }
    树状结构
    json 字符串相当于一个倒挂的树, key 相当于 树的节点.
    json 树结构
    Gson 下载
    网址 http://mvnrepository.com/artifact/com.google.code.gson/gson
    选择版本,进入下载jar.
    Gson 格式化 和 解析
    Gson 格式化
    将 Java 对象 格式化为 Json 字符串.
    实现步骤 :
    获得需要的对象:
    Student stu = new Student();
    stu.setName("张三");
    stu.setAge(18);
    stu.setSex(true);
    格式化
    Gson gson = new Gson();
    //将 对象 转化成 json 字符串
    String json = gson.toJson(stu)
    Gson 解析
    json | Gson对象 | 类型--------------------|----------- ----|-----------------------------------{},[] |JsonElement |一切json节点皆为JsonElement(json节点){key:123} |JsonPrimitive |valueint,gson中的基本类型{key:12.3} |JsonPrimitive |valuefloat,gson中的基本类型{key:true} |JsonPrimitive |value为boolean,gson中的基本类型{key:"123"} |JsonPrimitive |value为String,gson中的基本类型{key:NULL} |JsonNull |value为空,gson中的Null类型{key:{key:value}} |JsonObject |value为json节点,gson中的对象类型{key:[{key,value},{key,value}]} |JsonObject |value为json节点,gson中的对象类型[] |JsonArray |整个节点以[]开始,gson中的数组类型
    将 Json 字符串 解析 成 java 对象.
    Gson 的 节点对象:
    JsonElement : 所有的节点 都是 JsonElement 对象.
    JsonPrimitive : 基本的 数据类型的 节点 对象, JsonElement 的子类.
    JsonNull : 代表 空节点 对象,即 有 key,value 为空,JsonElement 的子类.
    JsonObject : 对象 数据类型的 节点 对象, JsonElement 的 子类.
    JsonArray : 数组 数据类型的 节点 对象, JsonElement 的 子类.
    JsonElement的取值:
    JsonPrimitive : value 的 取值对应 java
    int,double,float,long,short,boolean,char,byte,String,BigDecimal,BigInteger,Number
    JsonObject : value 的 取值对应 java 的 Object 对象.
    JsonArray : value 的 取值对应 java 的 List 及其子类对象.
    Json的解析成 java 对象
    Gson gson = new Gson();
    // 将json 转化成 java 对象
    Student stu = gson.fromJson(json, Student.class);
    Json 解析 成 List
    Gson gson = new Gson();
    // 将 json 转化 成 List泛型
    List<Student> stus = gson.fromJson(json, new TypeToken<List<Student>>() {}.getType());
    Json 解析 成 mapsss
    Gson gson = new Gson();// 将 json 转化 成 Map泛型Map<String,String> map = gson.fromJson(json, new TypeToken<Map<String,String>>() {}.getType());
    Json 节点 的解析
    步骤 :
    获得 解析者
    JsonParser parser = new JsonParser();
    获得 根节点元素
    JsonElement root = parser.parse(json);
    根据 文档判断根节点属于 什么类型的 Gson节点对象
    //假如文档 显示 根节点 为对象类型
    // 获得 根节点 的实际 节点类型
    JsonObject element = root.getAsJsonObject();
    取得 节点 下 的某个节点的 value
    // 获得 name 节点的值,name 节点为基本数据节点
    JsonPrimitive nameJson = element.getAsJsonPrimitive("name");
    String name = nameJson.getAsString();
    
    // 获得 students 节点的值, students 节点为 数组数据节点
    JsonArray arrayJson = element.getAsJsonArray("students");
    // 获得数据 的长度
    int size = arrayJson.size();
    for(int i = 0; i < size; i++) {
        //获得每一个json 元素
        JsonElement e = arrayJson.get(i);
        // 通过元素 得到需要的节点值 TODO:
    }
    展开全文
  • gson 解析 时间类型

    万次阅读 2019-12-28 16:56:51
    GsonBuilder builder = new GsonBuilder(); // Register an adapter to manage the date types as long values builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() { ...
     GsonBuilder builder = new GsonBuilder();
    
    // Register an adapter to manage the date types as long values
    
     builder.registerTypeAdapter(Date.class, new JsonDeserializer<Date>() {
                            public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
                                return new Date(json.getAsJsonPrimitive().getAsLong());
                            }
                        });
    
     Gson gson = builder.create();
    
     WebDynamic webDynamic = gson.fromJson(json, WebDynamic.class);

     

    展开全文
  • 包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class ...

空空如也

1 2 3 4 5 ... 20
收藏数 18,129
精华内容 7,251
关键字:

gson