我正在观察 Jackson JsonParser
的一些奇怪行为,具体来说,捕获一个正确的 JsonPointer
而在数组中。
给定以下 JSON 片段:
[
{
"name": "a",
"children": [
{
"name": "b"
},
{
"name": "c"
},
{
"name": "d"
}
]
},
{
"name": "e",
"children": [
{
"name": "f"
},
{
"name": "g",
"children": [
{
"name": "h"
},
{
"name": "i"
}
]
}
]
},
{
"name": "j"
}
]
我有一个简单的 Kotlin 函数,它尝试按如下方式迭代 nextToken()
:
fun main()
{
val jsonParser = jacksonObjectMapper().readTree(JSON).traverse()
while (jsonParser.nextToken() != null)
{
val jsonPointer = jsonParser.parsingContext?.pathAsPointer(true) ?: continue
val tokenName = jsonParser.currentToken.name
println("${jsonPointer.toString().padEnd(40)} $tokenName")
}
}
现在,这是奇怪的地方; jsonPointer
没有区分输出中指示的数组索引:
START_ARRAY
START_OBJECT
/0/name FIELD_NAME
/0/name VALUE_STRING
/0/children FIELD_NAME
/0/children START_ARRAY
/0/children START_OBJECT
/0/children/0/name FIELD_NAME
/0/children/0/name VALUE_STRING
/0/children END_OBJECT
/0/children START_OBJECT
/0/children/0/name FIELD_NAME
/0/children/0/name VALUE_STRING
/0/children END_OBJECT
/0/children START_OBJECT
/0/children/0/name FIELD_NAME
/0/children/0/name VALUE_STRING
/0/children END_OBJECT
/0/children END_ARRAY
END_OBJECT
START_OBJECT
/0/name FIELD_NAME
/0/name VALUE_STRING
/0/children FIELD_NAME
/0/children START_ARRAY
/0/children START_OBJECT
/0/children/0/name FIELD_NAME
/0/children/0/name VALUE_STRING
/0/children END_OBJECT
/0/children START_OBJECT
/0/children/0/name FIELD_NAME
/0/children/0/name VALUE_STRING
/0/children/0/children FIELD_NAME
/0/children/0/children START_ARRAY
/0/children/0/children START_OBJECT
/0/children/0/children/0/name FIELD_NAME
/0/children/0/children/0/name VALUE_STRING
/0/children/0/children END_OBJECT
/0/children/0/children START_OBJECT
/0/children/0/children/0/name FIELD_NAME
/0/children/0/children/0/name VALUE_STRING
/0/children/0/children END_OBJECT
/0/children/0/children END_ARRAY
/0/children END_OBJECT
/0/children END_ARRAY
END_OBJECT
START_OBJECT
/0/name FIELD_NAME
/0/name VALUE_STRING
END_OBJECT
路径总是返回 0
的索引,无论是在第一个还是第 n 个元素中。
这是一个错误吗?还是我以某种方式设法介绍了一个?
最佳答案
您可能遇到了这个问题:
https://github.com/FasterXML/jackson-databind/issues/2525
它特别影响“读取”JsonNode
内容的情况。
2.11 的处理已修复(将于 2019 年底或 2020 年初发布),但尚未为 2.10 打补丁。
关于java - 这是 Jackson JsonParser 中的错误,还是我做错了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58633009/