美文网首页
json手动解析

json手动解析

作者: 华人有为 | 来源:发表于2019-07-30 09:20 被阅读0次

    开发的同学可能都遇到过这样的json,对象 中 key是数字(不固定的数字)value是数组,想得到数组中的对象就要手动解析了。

    image.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

    安卓开发学习公众号: 安卓学习公众号.jpg

    相关文章

      网友评论

          本文标题:json手动解析

          本文链接:https://www.haomeiwen.com/subject/ubtgrctx.html