首页 > 解决方案 > 如何在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);

我应该如何解决这个问题?

标签: javajsonmongodbjackson

解决方案


Table[] tablesFromJSON = mapper.readValue

您的机器是否安装了 ~64GB 的 RAM?因为否则,任何尝试将这个特技与 15GB.json文件相比都将花费很长时间,然后OutOfMemoryError显然会以 .

因此,我高度怀疑您是否真的想要您所要求的。

相反,您想要流式传输这些数据。采取InputStream,使用一些 JSON 库从流中读取一个json 对象,在 java 代码中处理这个对象,而不是通过将它存储在一个巨大的ArrayList或其他的HashMap东西中 - 以一种之后它可以被垃圾收集的方式,并且然后从流中读取更多字节,刚好够下一个对象,依此类推。

因此:这个答案就是你想要的。


推荐阅读