我尝试使用Gson流API解析Wikidata JSON dump,因为该文件大约是70GB的json。该文件的整体结构如下:
[
{"type":"item",... other fields ...},
{"type":"property",... other fields ...},
.....
]
这是一个对象数组,其中每个对象可以是item
或property
类型,我想实例化一个不同的类(即我在Java中有一个对应的Item和Property类代码)根据我遇到的对象。
基本上,我想查看type
字段,然后相应地解析以下JSON。由于JsonReader似乎没有提供getNextJsonObject()
或类似功能,除了预处理整个文件并将条目分成两个单独的文件之外,有没有办法做到这一点?该文件非常大,以至于当我可以动态执行所有操作时,我希望避免额外的预处理步骤。
答案 0 :(得分:0)
经过一番思考,我实际上找到了一个非常简单的解决方案。 Gson API提供了方法:
Gson.fromJson(JsonReader reader, Class class)
这将从阅读器读取下一个对象并反序列化为您作为参数传递的类。因为在我的情况下,我不知道要序列化的哪个类,我可以执行以下操作:
JsonObject asd = gson.fromJson(reader, JsonObject.class);
if (asd.get("type").getAsString().equals("item")) {
// Instantiate item
} else {
// Instantiate property
}