我试图遍历下面的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();
}
答案 0 :(得分:1)
首先,您的if
条件存在严重错误:
根据Jackson
库,当找不到路径时,方法path()
会返回MissingNode
个对象而不是null
,因此您需要修复{{1}相应的条件。
由于if
是MissingNode
数据类型的类型,因此对Jackson
的检查是重要的,您只需检查它是MissingNode
。
此方法类似于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。