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

问题描述 投票:0回答:1

社区!我从某些API得到以下JSON响应:

[
    [
        [
            {
                "key": [
                    "1",
                    "test1"
                ],
                "value": 1582890257944
            },
            {
                "key": [
                    "2",
                    "test2"
                ],
                "value": 1582888081654
            },
            {
                "key": [
                    "3",
                    "test3"
                ],
                "value": 1582884771691
            }
        ]
    ]
]

我应该创建类以将此JSON映射到Java类以前我得到以下JSON:

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

并且为此JSON创建了一个简单的类:

public class SomeClass {

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

和杰克逊将其正确映射,没有任何问题...

[请帮助我,我需要一个或多个班级的结构?我试图写这样的东西:

        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 ...我应该使用下一个结构创建类吗?

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

但是我从杰克逊那里得到了错误:

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

java json jackson mapping objectmapper
1个回答
0
投票

使用List<List<List<String>>> key将不起作用,因为示例代码中的Json结构为List<List<List<SomeClass>>>

您可以使用Jackson TypeReference类进行反序列化。使用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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.