gson 将JSON字符串转换为对象时返回“应为开始_ARRAY,但实际为STRING”[重复]

amrnrhlw  于 2022-11-06  发布在  其他
关注(0)|答案(2)|浏览(152)

此问题在此处已有答案

Why does Gson fromJson throw a JsonSyntaxException: Expected BEGIN_OBJECT but was BEGIN_ARRAY?(2个答案)
四年前就关门了。
服务器返回了一个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:应为开始_ARRAY,但实际为字符串
这是怎么回事?

piah890a

piah890a1#

您要将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内容不匹配。请看这里了解如何解决这个问题:

mzmfm0qo

mzmfm0qo2#

将您的服务器响应json从:

[
    {
        "id": "one",
        "values": {
            "name": "John",
        }
    },
    {
        "id": "two",
        "values": {
            "name": "Bob",
        }
    }
]

收件人:

[
    {
        "id": "one",
        "values": [
            {"name": "John"}
        ]
    },
    {
        "id": "two",
        "values": [
            {"name": "Bob"}
        ]
    }
]

相关问题