2

我有一堂 POJO

Class Pojo {
String id;
String name;
//getter and setter
}

我有一个像

{
    "response" : [
        {
            "id" : "1a",
            "name" : "foo"
        }, 
        {
            "id" : "1b",
            "name" : "bar"
        }
    ]
}

我正在使用 Jackson ObjectMapper 进行反序列化。List<Pojo>在不创建任何其他父类的情况下如何获得?

如果不可能,是否可以获得Pojo仅包含 json 字符串的第一个元素的对象,即在这种情况下id="1a"name="foo"

4

3 回答 3

4

您首先需要获取数组

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
于 2013-09-30T14:44:15.510 回答
0

您可以将通用 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>>() {});
于 2013-09-30T14:44:32.687 回答
0
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 文件创建一个 JSON 节点。现在您有了一个 JSON 节点。您可以像我所做的那样使用 JSON 节点的路径功能转到所需的位置

root.path("response")

但是,这将返回一个 JSON 树。为了制作一个字符串,我使用了 toString 方法。现在,你有一个像下面这样的字符串 " [ { "id" : "1a", "name" : "foo" }, { "id" : "1b", "name" : "bar" } ] " 你可以映射这个带有 JSON 数组的字符串如下

String desiredString = root.path("response").toString();
pojos = objectMapper.readValue(desiredString ,new TypeReference<List<Pojo>>() {});
于 2019-10-05T15:06:29.910 回答