java - 这是 Jackson JsonParser 中的错误,还是我做错了什么?

标签 java json kotlin jackson jsonpointer

我正在观察 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/

相关文章:

java - MapReduce 找不到符号

java - 有没有一种方法可以在 Android 中打开 Wi-Fi 设置并提供返回调用应用程序的路径?

java - Jackson 反序列化 Double

java - Android - 无法解析 org.jetbrains.kotlin :kotlin-gradle-plugin:1. 6.10

java - 我如何要求 Hibernate 在外键(JoinColumn)上创建索引?

java - Numpy.arange(start, end, step) 在 Java 中相当于浮点值

java - 如何将 Json 字符串转换为 Java 对象?

ios - 从 JSON 响应中获取字典数组中的数据

Java 8 Date API - 获取一个月的总周数

java - Kotlin:为什么我不能在循环守卫中做分配?