Gson解析数组

时间:2016-09-23 14:50:50

标签: android arrays parsing gson retrofit

我得到的回复可能是两个中的一个

"data": [
{
  "uuid": ".......",
  "error": true,
  "code": 142,
  "text": "Invalid uuid"
}
]

"data": {
"download_url": "http://....."
 }

为了在我的应用程序中解析它,我将它作为对象进行改造

public class downloadFileResponse extends generalStatusResponse {
Object data;

public Object getData() {
    return data;
}
}

并尝试像这样解析它

if (response.getStatus().getCode().equals("136")) {
                    String res = new Gson().toJson(response.getData());
                    try {
                        JSONObject t = new JSONObject(res);
                        Log.v("this", "r- " + t.getString("download_url"));
                    } catch (Exception e) {

                    }
                } else {
                    try {
                        List<downloadFileDataErrorFields> error = new Gson().fromJson(response.getData().toString(), new TypeToken<List<downloadFileDataErrorFields>>() { }.getType());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }

我的downloadFileDataErrorFields对象就是这个

public class downloadFileDataErrorFields {
String uuid;
String error;
String code;
String text;

public downloadFileDataErrorFields() {
}

public String getUuid() {
    return uuid;
}

public String getError() {
    return error;
}

public String getCode() {
    return code;
}

public String getText() {
    return text;
}
}

只有download_url的第二个响应它工作正常,但是当我尝试用错误解析第一个时我得到了这个

Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 87 path $[0].text

在此列中“无效的uuid”字符串中有一个空格。

任何人都知道如何解决这个问题?或者正确解析不同类型的回复?

谢谢

1 个答案:

答案 0 :(得分:0)

您的第一个JSON示例不是json列表,而是带有list作为子项的json对象。

您应该创建一个表示该JSON结构的新类,如下所示:

public class DownloadFileDataError {

private downloadFileDataErrorFields data;

public DownloadFileDataError() {
}

public String getFields() {
    return data;
}   

}

然后将其反序列化:

DownloadFileDataError error = new Gson().fromJson(response.getData().toString());