在 java 中使用 JsonNode 查找 JSON 没有 parent 的兄弟姐妹
Find JSON sibling with no parent using JsonNode in java
我有一个JSONobject如下:
[
{
"name":"thisIsAName",
"id":1
},
{
"name":"anotherName",
"id":2
},
{
"name":"anotherName2",
"id":3
}
]
我正在尝试根据名称查找 ID。没有 parent 时如何导航到同级?我从 Jersey 客户端收到 JSON 响应:
Response responseObject = client.getAllObjects();
JsonNode responseAsNode = responseObject.readEntity(JsonNode.class);
如果我按名称搜索:responseAsNode.findValue("name");
,那么它会正确地为我提供一个包含每个名称元素的 List<JsonNode>
,因此我可以在其中搜索符合我预期的那个,但它仅returns "name":"value",
的 Json 个节点的列表。
for (JsonNode node : responseAsNode.findValues("name")){
if (node.textValue().equals("ftp-" + DEFAULT_ENV.toLowerCase())) {
//Now, find my id and do something with it.
break;
}
}
如果我调用 node.getParent()
,我会得到一个异常,因为没有 parent。除了要求开发人员在 Json 前面添加 "list":
之外,我应该尝试什么?
导航 JSON 树,并尝试匹配每个元素。
String toFind = "anotherName";
Iterator<JsonNode> iter = responseAsNode.elements();
while (iter.hasNext())
{
JsonNode node = iter.next();
JsonNode name = node.get("name");
if (toFind.equals(name.asText()))
{
System.out.println(node.get("id").asLong());
}
}
这将打印 2
。
我有一个JSONobject如下:
[
{
"name":"thisIsAName",
"id":1
},
{
"name":"anotherName",
"id":2
},
{
"name":"anotherName2",
"id":3
}
]
我正在尝试根据名称查找 ID。没有 parent 时如何导航到同级?我从 Jersey 客户端收到 JSON 响应:
Response responseObject = client.getAllObjects();
JsonNode responseAsNode = responseObject.readEntity(JsonNode.class);
如果我按名称搜索:responseAsNode.findValue("name");
,那么它会正确地为我提供一个包含每个名称元素的 List<JsonNode>
,因此我可以在其中搜索符合我预期的那个,但它仅returns "name":"value",
的 Json 个节点的列表。
for (JsonNode node : responseAsNode.findValues("name")){
if (node.textValue().equals("ftp-" + DEFAULT_ENV.toLowerCase())) {
//Now, find my id and do something with it.
break;
}
}
如果我调用 node.getParent()
,我会得到一个异常,因为没有 parent。除了要求开发人员在 Json 前面添加 "list":
之外,我应该尝试什么?
导航 JSON 树,并尝试匹配每个元素。
String toFind = "anotherName";
Iterator<JsonNode> iter = responseAsNode.elements();
while (iter.hasNext())
{
JsonNode node = iter.next();
JsonNode name = node.get("name");
if (toFind.equals(name.asText()))
{
System.out.println(node.get("id").asLong());
}
}
这将打印 2
。