我正在观察 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 个元素中。
这是一个错误吗?还是我以某种方式设法介绍了一个?