开发的同学可能都遇到过这样的json,对象 中 key是数字(不固定的数字)value是数组,想得到数组中的对象就要手动解析了。
![](https://img.haomeiwen.com/i15555141/5c9c84b627272a3f.png)
下面是使用GsonFormat 插件自动生成的bean对象。
public class MyRoomeListBean {
// 因为key不是固定的这个要拿掉手动解析
//@SerializedName("530")
private List<Roome> roomeList;
public List<Roome> getRoomeList() {
return roomeList;
}
public void setRoomeList(List<Roome> roomeList) {
this.roomeList = roomeList;
}
public static class Roome {
/**
* firstName : XXX
* gender : null
* idNum : 4306211********475
* idNumType : 1
* mobilePhone : 186******93
* contractId : 67***61
* houseId : 5024746
* roomId : null
* bizType : 1
* occupation : null
* country : null
* houseNo : 010*****00603
* estateName : 华****
* building : null
* cell : null
* room : 607
* serialNum : null
* sign : 2
* addressFull : 华******室
*/
private String firstName;
private Object gender;
private String idNum;
private int idNumType;
private String mobilePhone;
private int contractId;
private int houseId;
private Object roomId;
private int bizType;
private Object occupation;
private Object country;
private String houseNo;
private String estateName;
private Object building;
private Object cell;
private String room;
private Object serialNum;
private String sign;
private String addressFull;
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public Object getGender() {
return gender;
}
public void setGender(Object gender) {
this.gender = gender;
}
public String getIdNum() {
return idNum;
}
public void setIdNum(String idNum) {
this.idNum = idNum;
}
public int getIdNumType() {
return idNumType;
}
public void setIdNumType(int idNumType) {
this.idNumType = idNumType;
}
public String getMobilePhone() {
return mobilePhone;
}
public void setMobilePhone(String mobilePhone) {
this.mobilePhone = mobilePhone;
}
public int getContractId() {
return contractId;
}
public void setContractId(int contractId) {
this.contractId = contractId;
}
public int getHouseId() {
return houseId;
}
public void setHouseId(int houseId) {
this.houseId = houseId;
}
public Object getRoomId() {
return roomId;
}
public void setRoomId(Object roomId) {
this.roomId = roomId;
}
public int getBizType() {
return bizType;
}
public void setBizType(int bizType) {
this.bizType = bizType;
}
public Object getOccupation() {
return occupation;
}
public void setOccupation(Object occupation) {
this.occupation = occupation;
}
public Object getCountry() {
return country;
}
public void setCountry(Object country) {
this.country = country;
}
public String getHouseNo() {
return houseNo;
}
public void setHouseNo(String houseNo) {
this.houseNo = houseNo;
}
public String getEstateName() {
return estateName;
}
public void setEstateName(String estateName) {
this.estateName = estateName;
}
public Object getBuilding() {
return building;
}
public void setBuilding(Object building) {
this.building = building;
}
public Object getCell() {
return cell;
}
public void setCell(Object cell) {
this.cell = cell;
}
public String getRoom() {
return room;
}
public void setRoom(String room) {
this.room = room;
}
public Object getSerialNum() {
return serialNum;
}
public void setSerialNum(Object serialNum) {
this.serialNum = serialNum;
}
public String getSign() {
return sign;
}
public void setSign(String sign) {
this.sign = sign;
}
public String getAddressFull() {
return addressFull;
}
public void setAddressFull(String addressFull) {
this.addressFull = addressFull;
}
手动解析代码:
Call<ResponseBody> call = Http.getDefault().getRoomieListLeon(UserInfo.openId());//这里Call里面的内容必须与HttpJson内的Call内的一致
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(@Nullable Call<ResponseBody> call, @NonNull Response<ResponseBody> response) {
//避免空指针
if (response == null){ return;}
MyRoomeListBean myRoomeListBean = new MyRoomeListBean();
//准备一个集合出来
ArrayList<MyRoomeListBean.Roome> roomes = new ArrayList<>();
myRoomeListBean.setRoomeList(roomes);
try {
String jsonStr = new String(response.body().bytes());//把原始数据转为字符串
Log.e("retrofit获取到的数据", jsonStr);
//返回的是空字符串不要往下执行了
if (jsonStr.length() == 0){ return; }
JSONObject jsonObject = new JSONObject(jsonStr);
// 使用getJSONObject时,如果返回的对象不是JSONObject,抛出JSONException异常 使用optJSONObject 返回null
JSONObject dataObject = jsonObject.optJSONObject("data");
Iterator<String> it = dataObject.keys();
while(it.hasNext()){
// 获得key
String key = it.next();
JSONArray datas = dataObject.optJSONArray(key);
for (int i = 0; i < datas.length(); i++) {
JSONObject datasItem = datas.optJSONObject(i);
MyRoomeListBean.Roome roome = new MyRoomeListBean.Roome();
roomes.add(roome);
String firstName = datasItem.optString("firstName");
roome.setFirstName(firstName);
int gender = datasItem.optInt("gender");
roome.setGender(gender);
String idNum = datasItem.optString("idNum");
roome.setIdNum(idNum);
String mobilePhone = datasItem.optString("mobilePhone");
roome.setMobilePhone(mobilePhone);
int contractId = datasItem.optInt("contractId");
roome.setContractId(contractId);
int houseId = datasItem.optInt("houseId");
roome.setHouseId(houseId);
// "roomId": null,
// "country": null,
int bizType = datasItem.optInt("bizType");
roome.setBizType(bizType);
String addressFull = datasItem.optString("addressFull");
roome.setAddressFull(addressFull);
String houseNo = datasItem.optString("houseNo");
roome.setHouseNo(houseNo);
//"occupation": null,
String estateName = datasItem.optString("estateName");
roome.setEstateName(estateName);
String building = datasItem.optString("building");
roome.setBuilding(building);
//"cell": null,
String room = datasItem.getString("room");
roome.setRoom(room);
// "serialNum": null,
//"sign": null,
//"openId": null
}
}
//jsonToObj(jsonStr);//这是对字符串数据解析具体数据方法
} catch (Exception e) {
e.printStackTrace();
}
view.showRoomieList(myRoomeListBean);
}
@Override
public void onFailure(@NonNull Call<ResponseBody> call, Throwable t) {
view.showMessage(t.toString());
}
});
}
GitHub地址:https://github.com/leonInShanghai 有用请star
安卓开发学习公众号:![](https://img.haomeiwen.com/i15555141/b5381a5e38c84a15.jpg)
网友评论