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

时间:2016-06-22 22:16:41

标签: java json jackson

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

  {
      "id": "1",
      "metaData": {
        "name": "nestedName"
      },
      "name": "rootName"
  }

我把这个结构放在com.fasterxml.jackson.databind.JsonNode对象中。要获取这些列的String值,我只需要在我的Java代码中包含此语句:

String id = jsonNode.findPath("id").textValue();

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

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

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

1 个答案:

答案 0 :(得分:2)

如果您希望根目录下的节点使用.get()

jsonNode.get("id").textValue();

如果你想得到“名字”,但你有歧义问题,你可以做类似的事情

jsonNode.findPath("metaData").findPath("name").textValue();

但当然,你知道必须了解一下架构。