我从服务器返回的JSON响应格式为:
[
{
"id": "one",
"values": {
"name": "John",
}
},
{
"id": "two",
"values": {
"name": "Bob",
}
}
]
这是我设置的课程:
public class TestClass implements Serializable {
@SerializedName("id")
private String id;
@SerializedName("values")
private List<String> values;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<String> getValues() {
return values;
}
public void setValues(List<String> values) {
this.values = values;
}
}
这是我的代码,用于将JSON解析为对象列表:
String response = serverResponseHere;
Gson gson = new Gson();
String json = gson.toJson(response);
Type collectionType = new TypeToken<List<TestClass>>(){}.getType();
List<TestClass> values = gson.fromJson(json, collectionType);
但是,出现以下错误:
com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期为BEGIN_ARRAY,但为STRING
这是怎么回事?
答案 0 :(得分:0)
您正在获取JSON响应内容
String response = serverResponseHere;
并将其转换为JSON
Gson gson = new Gson();
String json = gson.toJson(response);
这将生成一个包含您的内容的JSON字符串。看起来像
"[\n {\n \"id\": \"one\",\n \"values\": {\n \"name\": \"John\",\n }\n },\n {\n \"id\": \"two\",\n \"values\": {\n \"name\": \"Bob\",\n }\n }\n]\n"
当您尝试将其反序列化为List<TestClass>
时,它显然会失败,因为它是JSON字符串而不是JSON数组。
在反序列化内容之前,请勿将您的内容序列化为JSON,因为它已经是JSON。
其他人提到了这一点,您的values
字段与JSON内容不匹配。有关如何解决此问题,请参见此处:
答案 1 :(得分:-2)
从更改服务器响应json:
[
{
"id": "one",
"values": {
"name": "John",
}
},
{
"id": "two",
"values": {
"name": "Bob",
}
}
]
收件人:
[
{
"id": "one",
"values": [
{"name": "John"}
]
},
{
"id": "two",
"values": [
{"name": "Bob"}
]
}
]