java - 如何在java中解析不以逗号分隔的Json数组
问题描述
我有一个来自 mongodb 导出的 db.json 文件。json的结构如下:
{
"item1" : "test",
"item2" : "test",
"item3" : "test"
}
{
"item1" : "string",
"item2" : "string",
"item3" : "string"
}
如您所见,它没有逗号分隔符,也没有格式化为序列化对象的集合。
我正在尝试使用 Jackson 将此 db.json 反序列化为 java 类,但显然它只解析第一对括号,因为这不被识别为标准 json 格式的数组。要被认可,它应该是这样的。
[{
"item1" : "test",
"item2" : "test",
"item3" : "test"
},
{
"item1" : "string",
"item2" : "string",
"item3" : "string"
}]
我无法手动修改 json,因为它是 15GB 的文本。这是我试过的
ObjectMapper mapper = new ObjectMapper();
Table[] tablesFromJSON = mapper.readValue(Paths.get("db.json").toFile(), Table[].class);
我应该如何解决这个问题?
解决方案
Table[] tablesFromJSON = mapper.readValue
您的机器是否安装了 ~64GB 的 RAM?因为否则,任何尝试将这个特技与 15GB.json
文件相比都将花费很长时间,然后OutOfMemoryError
显然会以 .
因此,我高度怀疑您是否真的想要您所要求的。
相反,您想要流式传输这些数据。采取InputStream
,使用一些 JSON 库从流中读取一个json 对象,在 java 代码中处理这个对象,而不是通过将它存储在一个巨大的ArrayList
或其他的HashMap
东西中 - 以一种之后它可以被垃圾收集的方式,并且然后从流中读取更多字节,刚好够下一个对象,依此类推。
因此:这个答案就是你想要的。
推荐阅读
- javascript - 尝试运行代码时检查页面不起作用
- c - 如何将 DX7 中的 SetTexture 更新到 DX9?
- printing - 为什么 flang Fortran print 在一定宽度处添加新行?
- javascript - 将两个返回语句合二为一
- python - requests_html 安装没有解决警告
- java - Java ListStack push 和 pushAll() 方法
- javascript - 节点 js,process.env 不读取环境变量
- flex-lexer - JFlex Block Comment 规则说明
- c++ - 在 4 字节值上使用运算符“*”,然后将结果转换为 8 字节值
- android - Unity:垂直组布局滚动不适用于 Android