解析gson从简单到copy

1.先上json图

{"code":1,"msg":"","data":{"user_id":25,"token":"1d750e0f1bdb49faad3d0caf616fc093d0132bc555b2640833","user_name":"","user_cname":"","spread_fg":0,"head_portrait":""}}

打开json.cn网址copy进去就是出现如图所示

开始解析:

1.下载as插件

2.创建实体类然后再实体类中使用快捷键alt+s复制json数据过去

3.可以看到解析的data里面只有一条数据,如果实体类中data是list的话,就可以改写成为data就行了如:

private List<DataBean> data  private DataBean data

然后调用,先过去所有json保存为字符串  s

开始代码:

    Gson gson=new Gson();

  实体类 data=gson.formJson(s,实体类.class);

  int code=data.getCode();//获取当前code

String msg=data.getMsg();//获取当前msg

//重头戏开始获取DataBean中的数据

String username=data.getData().getUserName();//这是获取data里面的字段username,其他的获取同理。

2.先上json图

{"code":1,"msg":"","data":[{"type_id":54,"type_name":"\u79df\u623f","show_img":"http:\/\/192.168.0.120\/peng\/samecity\/public\/upload\/upload\/20180816\/20180816102013351.png","show_order":0},{"type_id":55,"type_name":"\u4e70\u8f66","show_img":"http:\/\/192.168.0.120\/peng\/samecity\/public\/upload\/upload\/20180816\/20180816101815167.png","show_order":0}]}

可以看到,现在的data不一样了。里面变成了数组的形式,那怎么获取呢,还是按照步骤来:

1.新建实体类,将json数据生成(通过插件),会发现DataBean还是  List<Data> data,现在都不需要更改了,涉及到多条一样的数据了。

2.在代码中:

关键代码:for(int i=0;i<data.getData().size();i++){

   String type_name=data.getData().get(i).getTypeName();//获取子项后面可以通过id将他们分配到对应的位置。

}

3.先上json图

{"code":1,"msg":"","data":[[{"type_id":61,"type_name":"\u79df\u623f\u4e00\u7ea7","show_img":"","show_order":0},{"type_id":62,"type_name":"\u79df\u623f\u4e8c\u7ea7","show_img":"","show_order":0}],[{"type_id":61,"service_attribute_id":9,"service_attribute_name":"\u7279\u522b\u9700\u6c42","show_order":99,"need_must":1},{"type_id":61,"service_attribute_id":1,"service_attribute_name":"\u4f4f\u623f\u7c7b\u578b","show_order":3,"need_must":1},{"type_id":61,"service_attribute_id":2,"service_attribute_name":"\u5408\u79df","show_order":1,"need_must":1},{"type_id":62,"service_attribute_id":3,"service_attribute_name":"\u79df\u623f\u4e8c\u7ea7\u5c5e\u60271","show_order":0,"need_must":1},{"type_id":62,"service_attribute_id":4,"service_attribute_name":"\u79df\u623f\u4e8c\u7ea7\u5c5e\u60272","show_order":0,"need_must":1}],[{"service_attribute_id":9,"attribute_data_id":10,"attribute_data_name":"\u5382\u623f","show_order":999},{"service_attribute_id":9,"attribute_data_id":9,"attribute_data_name":"\u7a7a\u623f","show_order":34},{"service_attribute_id":2,"attribute_data_id":8,"attribute_data_name":"\u5927\u6742\u9662","show_order":6},{"service_attribute_id":1,"attribute_data_id":1,"attribute_data_name":"\u5355\u95f4","show_order":3},{"service_attribute_id":1,"attribute_data_id":2,"attribute_data_name":"\u4e00\u623f\u4e00\u5385","show_order":0},{"service_attribute_id":1,"attribute_data_id":3,"attribute_data_name":"\u4e24\u623f\u4e00\u5385","show_order":0},{"service_attribute_id":2,"attribute_data_id":4,"attribute_data_name":"\u522b\u5885","show_order":0}]]}

大致是jsonArray嵌套jsonArray。很奇葩但是真实存在,不过gson对我们的帮助就比较有限了,先说解决思路后面上代码

1.新建实体类,然后对实体类进行更改,因为你会发现DataBean变成了

private List<List<DataBean>> data;

这个需要我们进行更改的,可以将其更改为 private DataBean data;不过这个地方不会被用到,我们还要新建3个实体类,对应的是data里面的3个 [  ] 里面的数据。怕不懂实体类应该怎么设置先上一个代码其他同理:

public static class Data1 {
    private int type_id;
    private String type_name;
    private String show_img;
    private int show_order;

    public int getType_id() {
        return type_id;
    }

    public void setType_id(int type_id) {
        this.type_id = type_id;
    }

    public String getType_name() {
        return type_name;
    }

    public void setType_name(String type_name) {
        this.type_name = type_name;
    }

    public String getShow_img() {
        return show_img;
    }

    public void setShow_img(String show_img) {
        this.show_img = show_img;
    }

    public int getShow_order() {
        return show_order;
    }

    public void setShow_order(int show_order) {
        this.show_order = show_order;
    }
}

上面的是data第一个  []  里面的代码

2。开始解析第一个data[]里面的代码,因为代码是师傅用JSONObject写的自己暂时还没理解,不过不影响copy用:

try {
    JSONObject jsonObject = new JSONObject(s);
    int code = jsonObject.optInt("code");
    if (code==1) {
        JSONArray jsa =jsonObject.optJSONArray("data");
        JSONArray jsa0 = jsa.optJSONArray(0);
        List<TestJson.Data1> list1 = new ArrayList<>();
        for (int i = 0; i < jsa0.length(); i++) {
            TestJson.Data1 bean = new TestJson.Data1();
            JSONObject object = jsa0.optJSONObject(i);
            int typeId = object.optInt("type_id");
            String typeName = object.optString("type_name");
            bean.setType_name(typeName);
            bean.setType_id(typeId);
            list1.add(bean);
        }
    }
}catch (Exception e){
    e.printStackTrace();
}

就进去s代表的是所有json内容。如果code=1有数据,那就进入“data”节点里面

List<TestJson.Data1> list1 = new ArrayList<>();这List里面就是三个实体类中,我们现在需要的一个。

在循环里面获取实例化,方便后面设置数据

TestJson.Data1 bean = new TestJson.Data1();

获取值并设置到实体类中,然后将所有数据添加到List集合中

int typeId = object.optInt("type_id");

String typeName = object.optString("type_name");

bean.setType_name(typeName);

bean.setType_id(typeId);

list1.add(bean);

现在可以通过log日志打印查看一下

Log.i(TAG, "我现在看到数据是: " + list1.toString());

猜你喜欢

转载自blog.csdn.net/ai1362425349/article/details/82592219
今日推荐