【问题标题】:How to parse nested JSON objects data?如何解析嵌套的 JSON 对象数据?
【发布时间】:2015-07-25 13:58:14
【问题描述】:

我在我的 Android 应用程序中使用 volley 和 gson 库,主要目的是调用服务器 API 并检索一些数据。

一切正常,除了嵌套的 JSON 对象数据。我无法检索位置对象内的信息(lat、lng)。

它抛出一个错误:
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 99 path $.position 并指出 deliveryResponse 方法。

我的 JSON 示例:

[{"number":18,"name":"John","address":"John Street.","position":{"lat":12.68300406,"lng":45.28001237},"status":"OPEN"},{"number":18,"name":"John","address":"John Street.","position":{"lat":12.68300406,"lng":45.28001237},"status":"OPEN",}]

deliveryResponse 方法:

@Override
protected void deliverResponse(JSONArray jsonArray) {
    if (mListener != null && jsonArray != null) {
        List<T> responseArray = new ArrayList<T>();
        for (int i = 0; i < jsonArray.length(); i++) {
            try {
                JSONObject entry = jsonArray.getJSONObject(i);
                T parsedResponse = new Gson().fromJson(entry.toString(), mClass);
                if (parsedResponse != null) {
                    responseArray.add(parsedResponse);
                }
            } catch (JSONException e) {
                Log.d(TAG, "Error parsing JSON Object: " + e.getMessage());
                mListener.onResponse(jsonArray);
            }
        }
        mListener.onGsonResponse(responseArray);
    }
}

对象类:

public class Object {
private int number;
private String name;
private String address;
private List<PositionObj> position;

public int getNumber() {
    return number;
}

public void setNumber(int number) {
    this.number = number;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}

public List<PositionObj> getPosition() {
    return position;
}

public void setPosition(List<PositionObj> position) {
    this.position = position;
}

PositionObj 类:

public class PositionObj {
private int lat;
private int lng;

public int getLat() {
    return lat;
}

public void setLat(int lat) {
    this.lat = lat;
}

public int getLng() {
    return lng;
}

public void setLng(int lng) {
    this.lng = lng;
}

你有什么建议?

【问题讨论】:

    标签: java android json gson android-volley


    【解决方案1】:

    在您的 JSON 中,position 是一个对象,而不是一个数组。所以,在你的班级Object(奇怪的名字)中,将private List&lt;PositionObj&gt; position; 更改为private PositionObj position;

    【讨论】:

    • 类名不同。这只是对象类的一个示例。顺便说一句,谢谢你的回答!现在一切正常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-01-01
    • 2019-12-18
    相关资源
    最近更新 更多