java - 更快的杰克逊不可能这么愚蠢(行尾)
问题描述
我正在使用一些现有的代码,这些代码使用常规的 Jackson 映射器并从 JSON 文件中读取一行,如下所示:
mapper.readValue(line, new TypeReference<Map<String, Object>>(){});
json 本身非常大,从技术上讲,它的格式不是很好,因为文件包含这样的 json(大量 json 对象之间没有逗号):
{...}
{...}
{...}
我在第一个对象中加入了一些“返回”,也就是行尾,以便更好地阅读它,所以现在它看起来像:{..., ...,
……,……}
{...}
{...}
你知道只是有点缩进至少能够阅读它。
我这样做的那一刻,我的单元测试开始失败:
Unexpected end-of-input within/between Object entries
自从我不得不在如此低的水平上与杰克逊打交道以来已经有一段时间了。我假设通常它会忽略 EOL 字符,如果它遇到以下情况:
{“核心价值”,
“核心价值”...
}
那么它与TypeReference
正在使用的设置有关吗?
解决方案
该 TypeReference 想要生成一个 Map,它通常来自具有命名属性的单个 Json 对象,而不是由 \n 分隔的独立对象列表。
当然,包含由 \n 分隔的 json 对象的文件不是有效的 json。
如果您的代码正在读取每一行...直到下一个 \n 然后将该单个对象传递给 Jackson 进行解析,然后在对象中添加 \n 将导致您的代码开始将部分对象发送给 Jackson,从而产生如下错误你看到了。
不能说这是否是您正在发生的事情,但这是您想到的第一个想法。
推荐阅读
- sparse-matrix - 在 Accord.NET 中创建和使用稀疏矩阵
- javascript - 无法在“CSSStyleDeclaration”上执行“setProperty”:这些样式是计算出来的,因此“opacity”属性是只读的
- react-native - 如何在 react-native-navigation 底部标签栏中设置图标大小
- python - 在 TensorFlow 2 上实现 A3C
- javascript - js中是否存在类似'onImport'的东西?
- reactjs - React-Bootstrap Collapse 不适用于自定义组件
- excel - VBA中只加粗一部分
- r - 如何使用 barplot() 在 R 中使条更细?
- android - 减小一些 pdf 文件的大小
- python - 基于 Django 函数的视图允许 is_active 用户,而 ClassBasedView 不允许 is_active 用户