我有多个复杂(Jackson)JsonNode结构,我需要在其中找到一个值。 问题非常类似于: how to parse json array value using json node和Jackson JsonNode Serialization。
所以我想在JsonNode中找到一个具有以下限制的值: 上下文由(Cucumber)测试提供。例如'内部'标题/配置/关系“我看到值”a“'参见下面的例子。
我尝试使用的代码:
public JsonNode findNodeInPath (String path, JsonNode parent) {
int firstSlash = path.indexOf("/");
if (parent == null) {
return null;
}
else {
String nextNodeName = firstSlash == -1 ? path : path.substring(0, firstSlash);
if (parent.isObject()) {
return findNodeInPath(firstSlash == -1 ? path : path.substring(firstSlash + 1), parent.findValue(nextNodeName));
}
else { // parent is array
if (parent.has(path)) {
return parent;
}
for (JsonNode node : parent) {
JsonNode nextNode = node.findValue(nextNodeName);
if (nextNode != null) {
return findNodeInPath(firstSlash == -1 ? path : path.substring(firstSlash + 1), nextNode);
}
}
}
return null; // not found
}
}
但这不起作用,因为当我到达一个只有字符串的JsonArray时(如下面的“关系”),Jackson不允许我访问其中的文本。
我不想为每个JsonNode创建一个POJO,因为:
节点之间的差异非常大。我看不到任何适合我的大多数配置的对象。
仅用于测试。结构就像它们一样,只是坐在数据库上。我不想仅为测试目的创建对象。
我有一个JsonNode的例子:
{
"title": [
{
"configuration": [
{
"product1": {
"id": "id1",
"name": [
{
"locale": "en_US",
"value": "value1"
}
]
},
"configured": true,
"relation": ["a","b","c"],
"relation2": []
}
]
}
]
}
我为长期问题道歉,任何帮助(从任何方向)都将不胜感激。