Android Studio 将 JSON 转换为对象列表

问题描述 投票:0回答:2

我目前正在尝试获取 JSON 对象并将值存储到对象类中,然后将这些对象存储在列表中。我似乎能够将字符串值分配给变量,但 int 和 double 值不起作用。

我的代码是:

        JSONObject json = new JSONObject(result);

        ArrayList<Doormat> doormats = new ArrayList<>();

        JSONArray jsonArray = json.optJSONArray("data");


        for(int i = 0; i < Objects.requireNonNull(jsonArray).length(); i++){
            JSONObject jsonData = jsonArray.optJSONObject(i);

            int doormat_id = jsonData.optInt("doormat_id");

            double latitude = jsonData.optDouble("latitude");
            double longitude = jsonData.optDouble("longitude");

            String created_by = jsonData.optString("created_by");
            String shape = json.optString("shape");
            String color = json.optString("color");

            Doormat doormat = new Doormat(doormat_id, latitude, longitude, created_by, shape, color);
            doormats.add(doormat);

         }

当 JSONObject jsonData 通过 for 循环运行时(JSONArray 是一个对象数组),JSON 看起来像这样:

{"doormat_id":"176", "latitude":"28.135974884033203", "longitude":"-82.50953674316406", "created_by":"User",   "shape":"default_shape", "color":"default_color" }

我对 Android 开发还很陌生,因此我们将不胜感激。谢谢!

我尝试提取“doormat_id”等值的字符串,但它们返回空白,并且我无法将它们解析为 int。

java android json parsing
2个回答
0
投票

您可以使用GSON库将json数据转换为类对象。在 build.gradle(:app) 中提及这个库。

implementation 'com.google.code.gson:gson:2.8.6'

然后在活动中像这样使用它:

JSONObject obj = new JSONObject(result);
UserData user_data = (UserData) new Gson().fromJson(obj.toString(), UserData.class);

现在一些解释,假设我们有一个像这样的 json 对象:

  {
    "data": [{
            "doormat_id": 12,
            "latitude": 72.15642,
            "longitude": 72.15642,
            "created_by": "Batman",
            "shape": "mascular",
            "color": "black"
        },
        {
            "doormat_id": 13,
            "latitude": 72.15642,
            "longitude": 72.15642,
            "created_by": "Superman",
            "shape": "mighty",
            "color": "red"
        }
    ]
}

现在创建此 json 对象名称 UserData 的 Model 类:

   public class UserData {

    private List<DataBean> data;

    public List<DataBean> getData() {
        return data;
    }

    public void setData(List<DataBean> data) {
        this.data = data;
    }

    public static class DataBean {
        private int doormat_id;
        private double latitude;
        private double longitude;
        private String created_by;
        private String shape;
        private String color;

        public int getDoormat_id() {
            return doormat_id;
        }

        public void setDoormat_id(int doormat_id) {
            this.doormat_id = doormat_id;
        }

        public double getLatitude() {
            return latitude;
        }

        public void setLatitude(double latitude) {
            this.latitude = latitude;
        }

        public double getLongitude() {
            return longitude;
        }

        public void setLongitude(double longitude) {
            this.longitude = longitude;
        }

        public String getCreated_by() {
            return created_by;
        }

        public void setCreated_by(String created_by) {
            this.created_by = created_by;
        }

        public String getShape() {
            return shape;
        }

        public void setShape(String shape) {
            this.shape = shape;
        }

        public String getColor() {
            return color;
        }

        public void setColor(String color) {
            this.color = color;
        }
    }
}

现在你可以使用上面提到的Gson代码将json数据解析到UserData类,然后从user_data.getData();获取数组列表

P.s = 如果您想获取字符串中的所有 json 参数(例如 =doormat_id、经度等),则在 Model 类中将它们声明为 String,GSON 库将处理其余部分。


0
投票

请使用以下陈述:

Double.parseDouble(jsonData.optString("latitude"))
// or
Double.valueOf(jsonData.optString("latitude")).doubleValue();

--------->

Integer.parseInt(jsonData.optString("doormat_id"))
//or 
Integer.valueOf(jsonData.optString("doormat_id"));
© www.soinside.com 2019 - 2024. All rights reserved.