美文网首页
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的默认

    JSONObject jsonObject =newJSONObject(json); 手动解析json json...

  • json手动解析

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

  • Flutter -- JSON解析

    由于 Flutter 不支持运行时反射,JSON 解析完全是手动的。所谓手动解析,是指使用 dart:conver...

  • json解析1

    手动解析 //json:也是一种数据解析格式,键值对形式 - (void)viewDidLoad { [super...

  • JSON之手动解析

    概念:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。特点: 本质是...

  • Retrofit自定义解析器

    某些情况下,从服务器返回过来的json无法自动解析,只能通过手动解析(比如json某些字段的key是不固定的),如...

  • 网络

    因为IP地址 不好记,所以有了域名。NDS服务器专门解析域名。 自己手动写JSON数据转模型 利用JSON数据转模...

  • 6.1-Flutter中Json解析和模型转换

    Json解析和复杂模型转换实用技巧 应该使用哪种JSON序列化方式 小型项目:手动序列化; 大型项目借助插件生成j...

  • JSON

    JSON解析(反序列化) JSON解析(序列化) JSON解析补充

  • Json解析方式

    1.传统的JSON解析 1.1 生成Json 1.2 解析Json 2.Gson解析Json 2.1生成Json ...

网友评论

      本文标题:json手动解析

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