在没有序列化的情况下在Jackson JsonNode中查找值

时间:2018-02-13 07:12:59

标签: java json jackson

我有多个复杂(Jackson)JsonNode结构,我需要在其中找到一个值。 问题非常类似于: how to parse json array value using json nodeJackson 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,因为:

  1. 节点之间的差异非常大。我看不到任何适合我的大多数配置的对象。

  2. 仅用于测试。结构就像它们一样,只是坐在数据库上。我不想仅为测试目的创建对象。

  3. 我有一个JsonNode的例子:

    {
      "title": [
        {
          "configuration": [
            {
              "product1": {
                "id": "id1",
                "name": [
                  {
                    "locale": "en_US",
                    "value": "value1"
                  }
                ]
              },
              "configured": true,
              "relation": ["a","b","c"],
              "relation2": []
            }
          ]
        }
      ]
    }
    

    我为长期问题道歉,任何帮助(从任何方向)都将不胜感激。

0 个答案:

没有答案