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"
}
]
nextToken()
次のように反復を試みる単純なKotlin関数があります。
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のパッチはまだ適用されていませんが、処理は2.11で修正されています(2019年末または2020年初頭にリリースされる予定です)。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加