Java - 遍历数组节点

时间:2016-02-02 14:57:20

标签: java jackson

我试图遍历下面的JSON文本。问题是我不知道如何从Java中的坐标路径检索坐标数组。采用以下格式lon / lat。我已经包含了一个我试图解析的JSON字符串,但是我不确定如何使用Jackson Functions遍历数组。

坐标

"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 个答案:

答案 0 :(得分:1)

首先,您的if条件存在严重错误:

根据Jackson库,当找不到路径时,方法path()会返回MissingNode个对象而不是null,因此您需要修复{{1}相应的条件。

由于ifMissingNode数据类型的类型,因此对Jackson的检查是重要的,您只需检查它是MissingNode

  

path(String fieldName)

     

此方法类似于get(String),但   如果不存在这样的值,则不是返回null(由于这个原因)   节点不是对象,或者对象没有指定的值   字段),"缺少节点" (为isMissingNode()返回true的节点)   将被退回。

其次,要迭代ArrayNode,你可以这样做:

ArrayNode

答案 1 :(得分: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。