简体   繁体   English

如何解析嵌套的JSON对象数据?

[英]How to parse nested JSON objects data?

I'm using volley and gson libs in my Android app which main purpose is to call to the server API and retrieve some data. 我在Android应用程序中使用volley和gson库,其主要目的是调用服务器API并检索一些数据。

Everything works well, expect for nested JSON object data. 一切正常,需要嵌套的JSON对象数据。 I can't retrieve information (lat, lng) which are inside position object. 我无法检索位置对象内部的信息(纬度,经度)。

It throws an error: 它抛出一个错误:
Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 99 path $.position and points out to deliveryResponse method. Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 99 path $.position并指出了deliveryResponse方法。

Example of my JSON: 我的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 method: 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);
    }
}

Object class: 对象类:

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 class: 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;
}

What do you sugggest? 你建议什么?

In your JSON, position is an object and not an array. 在您的JSON中, position是一个对象而不是数组。 So, in your class Object (weird name), change private List<PositionObj> position; 因此,在您的类Object (怪异名称)中,更改private List<PositionObj> position; by private PositionObj position; 通过private PositionObj position; .

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM