我有一个POJO课程
Class Pojo {
String id;
String name;
//getter and setter
}
我有一个喜欢
的json{
"response" : [
{
"id" : "1a",
"name" : "foo"
},
{
"id" : "1b",
"name" : "bar"
}
]
}
我使用Jackson ObjectMapper进行反序列化。如何在不创建任何其他父类的情况下获取List<Pojo>
?
如果不可能,是否可以得到仅包含json字符串第一个元素的Pojo
对象,即本例id="1a"
和name="foo"
?
答案 0 :(得分:3)
首先需要获取数组
String jsonStr = "{\"response\" : [ { \"id\" : \"1a\", \"name\" : \"foo\"},{ \"id\" : \"1b\",\"name\" : \"bar\" } ]}";
ObjectMapper mapper = new ObjectMapper();
JsonNode node = mapper.readTree(jsonStr);
ArrayNode arrayNode = (ArrayNode) node.get("response");
System.out.println(arrayNode);
List<Pojo> pojos = mapper.readValue(arrayNode.toString(), new TypeReference<List<Pojo>>() {});
System.out.println(pojos);
打印(使用toString()
)
[{"id":"1a","name":"foo"},{"id":"1b","name":"bar"}] // the json array
[id = 1a, name = foo, id = 1b, name = bar] // the list contents
答案 1 :(得分:1)
您可以将通用readTree与JsonNode一起使用:
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(json);
JsonNode response = root.get("response");
List<Pojo> list = mapper.readValue(response, new TypeReference<List<Pojo>>() {});
答案 2 :(得分:0)
#include<iostream>
#include<string>
int main() {
const char clearCh = ' ';
const char fillCh = '*';
const size_t size = 6;
std::string str(size, clearCh);
for (int i = str.size() - 1; i >= 0; --i) {
str[i] = fillCh;
std::cout << str << std::endl;
}
for (int i = 0; i < str.size() - 1; ++i) {
str[i] = clearCh;
std::cout << str << std::endl;
}
return 0;
}
首先,您必须使用JSON文件创建一个JSON节点。现在您有了一个JSON节点。您可以像我一样使用JSON节点的路径功能转到所需的位置
Pojo pojo;
json = {
"response" : [
{
"id" : "1a",
"name" : "foo"
},
{
"id" : "1b",
"name" : "bar"
}
]
}
ObjectMapper mapper = new ObjectMapper();
JsonNode root = objectMapper.readTree(json);
pojo = objectMapper.readValue(root.path("response").toString(),new TypeReference<List<Pojo>>() {});
但是,这将返回JSON树。为了创建一个字符串,我使用了toString方法。 现在,您有一个如下所示的字符串 ” [ { “ id”:“ 1a”, “ name”:“ foo” }, { “ id”:“ 1b”, “ name”:“ bar” } ]“ 您可以按如下所示将此字符串与JSON数组映射
root.path("response")