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());