代码之家  ›  专栏  ›  技术社区  ›  Justin

快一点的杰克逊不能这么傻(行尾)

  •  0
  • Justin  · 技术社区  · 6 年前

    我正在使用一些常规代码,使用正则杰克逊映射器,从这样的JSON文件中读取一行:

    mapper.readValue(line, new TypeReference<Map<String, Object>>(){});
    

    JSON本身相当大,在技术上它格式不好,因为文件包含这样的JSON(在大JSON对象之间没有逗号):

    {…}

    {…}

    {…}

    我在第一个对象中添加了一些'returns'a.k.a行尾,以便更好地读取它,所以现在看起来: {,…,…

    …,…}

    {…}

    {…}

    你知道只是缩进一点,至少能读出来。

    当我这么做的时候,我的单元测试开始失败了:

    Unexpected end-of-input within/between Object entries
    

    我已经有一段时间没有和杰克逊打交道了。我假设它通常会忽略EOL字符,如果它遇到一些事情:

    {“key”:“值”,

    “key”:“value”…

    }

    这和 TypeReference 正在使用安装程序?

    1 回复  |  直到 6 年前
        1
  •  1
  •   joshp    6 年前

    该typereference希望生成一个映射,该映射通常来自具有命名属性的单个json对象,而不是由分隔的独立对象列表。

    当然,包含由分隔的json对象的文件是无效的json。

    如果您有读取每一行的代码…直到下一行,然后将该单个对象传递给jackson进行解析,然后在对象中添加将导致您的代码开始向jackson发送部分对象,从而产生您所看到的错误。

    不能说这是不是发生在你身上,但这是第一个想到的想法。