如何创建适当的 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();
}
}
社区! 我从一些 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();
}
}