如何解析 Json java 中不以逗号分隔的数组

How to parse Json Array not separted by comma in java

我有一个来自 mongodb 导出的 db.json 文件。 json 的结构如下:

{
"item1" : "test",
"item2" : "test",
"item3" : "test"
}
{
"item1" : "string",
"item2" : "string",
"item3" : "string"
}

如您所见,它没有逗号分隔符,也没有格式化为序列化对象的集合。

我正在尝试使用 Jackson 将此 db.json 反序列化为 java class 但显然它只解析第一对括号,因为这在标准 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);

我该如何解决这个问题?

导出时需要使用--jsonArray参数。更多详情 here

有一个 java 库可以将 JSON 字符串转换为 java 对象。 parse/generateJSON你想要的方式很快。 configure/validate JSON 每个级别。

请参考 Quick- Json Lib https://code.google.com/p/quick-json/ 有很好的例子和解释。 可能这会对你有所帮助。

Table[] tablesFromJSON = mapper.readValue

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

因此我非常怀疑你是否真的想要你看起来想要的东西。

相反,您想流式传输此数据。拿 InputStream,使用一些 JSON 库从流中读取 one json 对象,在 java 代码中处理这个对象, 和 not 通过将它存储在一个巨大的 ArrayListHashMap 或者什么不是 - 在某种程度上它可以在之后被垃圾收集,然后阅读一些流中的更多字节,刚好足够下一个对象,依此类推。

因此:就是你想要的。