社区!我从某些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])
使用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();
}
}