我正在观察杰克逊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个元素中.
这是个虫子吗?还是我想办法介绍了一个?
发布于 2019-11-07 23:07:20
你可能正在经历这样的问题:
https://github.com/FasterXML/jackson-databind/issues/2525
它特别影响JsonNode的“读取”内容的情况。处理是固定的2.11 (将在2019年年底或2020年初发布),虽然还没有修补2.10。
https://stackoverflow.com/questions/58633009
复制相似问题