使用 Jackson 的 JsonNode.findPath(String fieldName) 获取具有非唯一列名的字段的值

dan*_*l9x 4 java json jackson

考虑以下(简化的)JSON 树结构:

  {
      "id": "1",
      "metaData": {
        "name": "nestedName"
      },
      "name": "rootName"
  }
Run Code Online (Sandbox Code Playgroud)

我将此结构放入 com.fasterxml.jackson.databind.JsonNode 对象中。要获取这些列的字符串值,我只需在 Java 代码中包含以下语句:

String id = jsonNode.findPath("id").textValue();
Run Code Online (Sandbox Code Playgroud)

我喜欢它不仅因为它简单,而且我的代码不必知道它正在解析的 JSON 树结构。我意识到,如果我特别想要 [root][name],我就必须有某种确定逻辑。

我的问题是,为了以某种方式区分/指定要获取的“名称”,我需要的最少逻辑量是多少?我已经研究了 JsonNode.findValues(String fieldName) 以获取值列表,但仍然不确定如何确定哪个值来自哪个“名称”以及如何选择“根”值,或者至少,最接近根的那个。

抱歉,如果这是一个重复的问题,但我找不到完全匹配的问题,所以再次询问。

qHa*_*ack 6

如果你想要一个直接位于根目录下的节点,请使用 .get()

jsonNode.get("id").textValue();
Run Code Online (Sandbox Code Playgroud)

如果您想获得“名称”但遇到歧义问题,您可以这样做

jsonNode.findPath("metaData").findPath("name").textValue();
Run Code Online (Sandbox Code Playgroud)

但当然,您知道必须了解有关模式的一些信息。