我正在使用一些现有代码,这些代码使用常规 Jackson 映射器并从 JSON 文件中读取一行,如下所示:
mapper.readValue(line, new TypeReference<Map<String, Object>>(){});
json 本身相当大,从技术上讲,它的格式不好,因为该文件包含这样的 json(大量 json 对象之间没有逗号):
{...}
{...}
{...}
我将一些“返回”(又称行结尾)放入第一个对象中,以便更好地读取它,所以现在它看起来像: {...,...,
..., ...}
{...}
{...}
你知道只需稍微缩进一下就可以至少阅读它。
当我这样做时,我的单元测试开始失败:
Unexpected end-of-input within/between Object entries
我已经有一段时间没有在如此低的水平上与 jackson 打交道了。我假设如果遇到类似以下情况,通常它会忽略 EOL 字符:
{"键":"值",
“键”:“值”...
}
那么这与使用的 TypeReference
设置有关吗?
最佳答案
TypeReference 想要生成一个 Map,它通常来自具有命名属性的单个 Json 对象,而不是由\n 分隔的独立对象列表。
当然,包含由\n 分隔的 json 对象的文件不是有效的 json。
如果您的代码正在读取每一行...直到下一个\n 然后将该单个对象传递给 Jackson 进行解析,那么在对象中添加\n 将导致您的代码开始向 Jackson 发送部分对象,产生像您所看到的错误。
不能说这是否是您正在发生的事情,但这是我想到的第一个想法。
关于java - 更快的 jackson 不可能这么笨(行尾),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50935630/