更快的杰克逊不能成为这个愚蠢的人(行尾)

时间:2018-06-19 19:28:15

标签: java jackson

我正在使用一些使用常规Jackson映射器的现有代码,并从JSON文件中读取一行,如下所示:

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

json本身很大,从技术上讲它的格式不正确,因为文件包含这样的json(大量json对象之间没有逗号):

{...}

{...}

{...}

我将一些“ returns”也称为a行尾,以更好地读取它,因此现在看起来像: {...,...,

....,...}

{...}

{...}

您知道某种程度的缩进至少可以阅读它。

我做单元测试的那一刻开始失败:

Unexpected end-of-input within/between Object entries

自从我不得不以如此低的水平与杰克逊打交道以来已经有一段时间了。我假设正常情况下,如果遇到类似

的问题,它将忽略EOL字符

{“键”:“值”,

“键”:“值” ...

}

那与所使用的TypeReference设置有关吗?

1 个答案:

答案 0 :(得分:1)

该TypeReference想要生成一个Map,该Map通常来自具有命名属性的单个Json对象,而不是由\ n分隔的独立对象的列表。

当然,包含用\ n分隔的json对象的文件不是有效的json。

如果您的代码正在读取每一行...直到下一个\ n,然后将该单个对象传递给Jackson,以进行解析,则在对象中添加\ n会导致您的代码开始将部分对象发送给Jackson,产生您所看到的错误。

无法确定这是不是正在发生的事情,但这是我想到的第一个想法。