Java - 遍历数组节点

3
我正在尝试遍历下面的JSON文本。问题是我不确定如何在Java中从坐标路径检索出坐标数组,格式为lon/lat。我已经包含了一个我正在尝试解析的JSON字符串,但是我不确定如何使用Jackson函数遍历到数组中。
坐标
"coordinates": {
"type": "Point",
"coordinates": [-82.3248262, 29.6516344]

Java 代码

if(root.path("coordinates").path("coordinates").isArray() && 
   root.path("coordinates").path("coordinates") != null) {
        lat = root.path("coordinates").path("coordinates").get(1).asText();
        lon = root.path("coordinates").path("coordinates").get(0).asText();
}
2个回答

2

首先,您在if条件中存在关键错误:

根据Jackson库,当路径未找到时,方法path()返回MissingNode对象而非null,因此您需要相应地修复if条件。

由于MissingNodeJackson数据类型的一种,因此检查MissingNode是冗余的,您只需检查它是否为ArrayNode

path(String fieldName)

该方法类似于get(String),但不同之处在于,如果不存在这样的值(由于此节点不是对象或对象没有指定字段的值),则会返回“missing node”(返回isMissingNode()为true的节点)。

其次,要迭代ArrayNode,您可以执行以下操作:

if (root.path("coordinates").path("coordinates").isArray()) {
  lat = root.path("coordinates").path("coordinates").get(1).asText();
  lon = root.path("coordinates").path("coordinates").get(0).asText();
}

0

您提供的 JSON 无法解析。

以下是正确的格式:

{
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -82.3248262,
      29.6516344
    ]
  }
}

或者是扁平化的版本:

{"coordinates":{"type":"Point","coordinates":[-82.3248262,29.6516344]}}

一旦您有了代码,请将该字符串解析为JSON节点,您提供的if语句就可以正常工作。

编辑:如Avi在评论中提到的那样,.path()返回一个MissingNode实例,而不是null。如果您想检查null,请使用.get()。或者您可以使用.has(),它将返回true或false。


非常抱歉,我忘记复制和粘贴完整的JSON字符串了。你是正确的,现在它正常工作了。 - user2100493
1
@user2100493,如果路径不存在,则检查null的if语句永远不会为真,因为path()方法返回的是MissingNode对象而不是null。 - Avihoo Mamka

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接