java - 更快的 jackson 不可能这么笨(行尾)

标签 java jackson

我正在使用一些现有代码,这些代码使用常规 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/

相关文章:

java - 阿耳忒弥斯休息界面

json - 无法升级到 Jackson 2.1.4,Jersey 忽略注释

java - jackson 能否处理好中间关系

java - 创建 ServletContext 资源中定义的名称为 'jsonView' 的 bean 时出错

java - 带有 "feature-not-implemented"错误消息的 Smack 4.1 响应到类型为 'set' 的自定义 IQ

JavaFX 11 : IllegalAccessError when creating Label

java - 使用 ArrayList<Book> 存储书名

java - Minecraft 插件 NoClassDefFoundError

spring - RestTemplate + jackson

java - jackson 动态属性名称