我对杰克逊的世界很陌生,想从 jsons列表(这是第三方api的响应主体)中读取特定字段的值。
对于单个json,使用objectMapper
工作正常。
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(sampleString);
JsonNode idNode = rootNode.path("id");
System.out.println("id: "+ idNode.asText());
但我想解析 jsons列表(这是来自响应主体的字符串) 。例如,我收到了这个机构:
[
{
"id":10,
"firstName":"Jack",
"primaryPhone":"9999999999",
"email":"jack@me.com"
},
{
"id":4,
"firstName":"Mark",
"primaryPhone":"9999999991",
"email":"mark@me.com"
},
{
"id":12,
"firstName":"Susaan",
"primaryPhone":"9999999992",
"email":"susan23@me.com"
}
]
我想首先阅读id
,如果我找到一个特定的id,请从该块返回一些其他信息。
例如,如果id=4
,请阅读该人的firstName
和email
。
但我不确定如何解析json列表。
感谢任何建议/意见。
答案 0 :(得分:2)
你可以尝试,
JsonNode array = objectMapper.readValue(sampleString, JsonNode.class);
for(int i=0;i<array.length;i++){
JsonNode jsonNode = array.get(i);
JsonNode idNode = jsonNode.get("id");
String id = idNode.asText();
if(id.equals("4")){
JsonNode firstNameNode = jsonNode.get("firstName");
String firstName = firstNameNode.asText();
System.out.println("firstName = " + firstName);
JsonNode emailNode = jsonNode.get("email");
String email = emailNode.asText();
System.out.println("email = " + email);
break;
}
}
答案 1 :(得分:1)
答案 2 :(得分:1)
您可以创建如下所示的POJO:
class Record {
private Long id;
private String firstName;
//Getters and setters
}
将json
反序列化为这些POJOS的List
,例如:
ObjectMapper mapper = new ObjectMapper();
List<Record> records = mapper.readValue("", new TypeReference<List<Record>>() { });
完成后,您可以使用stream
过滤掉记录,例如:
List<Record> filtered = records.stream()
.filter(r -> r.getId() = 12)
.collect(Collectors.toList());