如何创建适当的 POJO 以提供 JSON 响应?

How to create appropriate POJOs to provided JSON response?

社区! 我从一些 API:

那里得到了以下 JSON 回复
[
    [
        [
            {
                "key": [
                    "1",
                    "test1"
                ],
                "value": 1582890257944
            },
            {
                "key": [
                    "2",
                    "test2"
                ],
                "value": 1582888081654
            },
            {
                "key": [
                    "3",
                    "test3"
                ],
                "value": 1582884771691
            }
        ]
    ]
]

我应该创建 classes 来将这个 JSON 映射到 Java classes 以前我得到以下 JSON:

[
    {
        "key": [
            "test1"
        ],
        "value": 1
    },
    {
        "key": [
            "test2"
        ],
        "value": 2
    }
]

为此 JSON 我创建了一个简单的 class:

public class SomeClass {

    private List<String> key;
    private int value;
}

Jackson 毫无问题地将其映射正确...

请帮帮我,class/classes 需要什么结构? 我试着写这样的东西:

        List<String> params = new ArrayList<>();
        params.add("1");
        params.add("test1");

        SomeClass someClass = new SomeClass();
        someClass.setKey(params);
        someClass.setValue(1L);

        List<SomeClass> arrays = new ArrayList<>();
        arrays.add(someClass);
        arrays.add(someClass);

        List<List<SomeClass>> arrayLists = new ArrayList<>();
        arrayLists.add(arrays);

        List<List<List<SomeClass>>> threeLists = new ArrayList<>();
        threeLists.add(arrayLists);

        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        String prettyJson = gson.toJson(threeLists);

        System.out.println(prettyJson);

并得到与我从响应中得到的相同的 JSON... 我应该用下一个结构创建 class 吗?

List<List<List<String>>> key;
long value;

但是我从 jackson 那里得到了错误:

线程 "main" com.fasterxml.jackson.databind.exc.MismatchedInputException 中的异常:无法从 START_ARRAY 令牌中反序列化 main.entity.SomeClass 的实例 在 [来源:(StringReader);行:2,列:5](通过引用链:java.lang.Object[][0])

使用 List<List<List<String>>> key 将不起作用,因为 Json 结构是 List<List<List<SomeClass>>>,正如您在示例代码中所拥有的那样。

你可以使用 Jackson TypeReference class 来反序列化。使用 jackson-databind 的示例代码。

public static void main(String[] args) {
    ObjectMapper mapper = new ObjectMapper();
    String json = "[[[{\"key\":[\"1\",\"test1\"],\"value\":1},{\"key\":[\"1\",\"test1\"],\"value\":1}]]]";
    TypeReference<List<List<List<SomeClass>>>> typeRef = new TypeReference<List<List<List<SomeClass>>>>() {
    };
    try {
        List<List<List<SomeClass>>> someClassList = mapper.readValue(json, typeRef);
        System.out.println(someClassList);
    } catch (Exception ex) {
        ex.printStackTrace();
    }
}