我正在尝试创建一些REST响应的自定义反序列化器。以下是返回对象的示例:
"someField": [
{
"key": "foo",
"value": {
"left": "bar_left",
"right": "bar_right"
}
},
{
"key": "foo2",
"value": {
"left": "bar_left2",
"right": "bar_right2"
}
}
],
"anotherField: [
{
"key": "foo3",
"value": {
"left": "bar_left",
"right": "bar_right"
}
},
{
"key": "foo4",
"value": {
"left": "bar_left2",
"right": "bar_right2"
}
}
],
"someMoreField": {}
我试图实现的是检索
left
和
right
基于给定的值
key
(这是唯一的)。
到目前为止,我得到了类似的结果:
List<JsonNode> keys = rootNode.findValues("key");
for (JsonNode keyNode: keys ) {
if (keyNode.asText().equals("foo")) {
System.out.println("NODE FOUND!");
//and here I would like to go one node up:
JsonNode parent = keyNode.getParent(); //such method doesn't exist
System.out.println(parent.get("left"));
}
}
因为JsonNode是单向链接的,所以不可能访问父节点。
你们中有人知道如何有效地迭代/解析JsonNode抛出
所有级别
所以我可以比较
钥匙
值,同时保留对父级的引用?
我有这样的想法:
JsonNode rootNode = //some retrieval blablalbal
JsonNode parent = rootNode;
Iterator<JsonNode> it = rootNode.iterateAllLevels()
while (it.hasNext()) {
JsonNode current = it.next();
if(current.asText().equals("searched key")) {
parent.get("value");
}
parent = current;
}
也许还有其他方法可以做到这一点?