Java 如何正确映射此json响应?

Java 如何正确映射此json响应?,java,json,gson,Java,Json,Gson,我无法将这个wikipedia opensearch json响应映射到我的模型。Im使用gson映射响应 [ "Computer", [ "Computer", "Computer program", "Computer science", "Computer network", "Comp

我无法将这个wikipedia opensearch json响应映射到我的模型。Im使用gson映射响应

[
    "Computer",
    [
        "Computer",
        "Computer program",
        "Computer science",
        "Computer network",
        "Computer keyboard",
        "Computer mouse",
        "Computer security",
        "Computer virus",
        "Computer data storage",
        "Computer hardware"
    ],
    [
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        "",
        ""
    ],
    [
        "https://en.wikipedia.org/wiki/Computer",
        "https://en.wikipedia.org/wiki/Computer_program",
        "https://en.wikipedia.org/wiki/Computer_science",
        "https://en.wikipedia.org/wiki/Computer_network",
        "https://en.wikipedia.org/wiki/Computer_keyboard",
        "https://en.wikipedia.org/wiki/Computer_mouse",
        "https://en.wikipedia.org/wiki/Computer_security",
        "https://en.wikipedia.org/wiki/Computer_virus",
        "https://en.wikipedia.org/wiki/Computer_data_storage",
        "https://en.wikipedia.org/wiki/Computer_hardware"
    ]
]

网址:

我的模型:

import lombok.Data;

@Data
public class OpensearchResponse {

    String searchTerm;

    String[] possibilities;

    String[] empty;

    String[] references;
    
}
当我尝试这样映射json响应时:

var opensearchResponse = gson.fromJson(jsonResponse, OpensearchResponse.class);
我得到这个错误

Exception in thread "main" com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

我怀疑我的数据结构是非常错误的。但具体是什么?

JSON有效字符串在顶级是一个带有键和值的对象,正如@azro所指出的,您是一个对象,使用gson或任何其他JSON解析器解析它不是一个有效的JSON字符串。这里有一个没有任何键的值对象。您必须将字符串解析到对象结构中。这个问题的要求与-您的JSON是数组格式,而不是对象格式。对象格式可以映射到相应的Java类(对象),而数组格式可以映射到Java列表(或集合)。映射时应该使用列表,而不是
OpensearchResponse
。此外,JSON外部数组的所有元素的格式都不相同(字符串v/s array/List)。如果所有元素的格式相同,则可以将其映射到
List
List
等。在您的情况下,它只能是
List
。另一种方法是通过添加缺少的键(键值格式)以对象格式使用JSON。谢谢!我才意识到:)