一尘不染

使用Jackson来流解析Json对象数组

json

我有一个包含对象的json数组的文件:

[{“ test1”:“ abc”},{“ test2”:[1,2,3]}]

我希望使用Jackson的JsonParser来从此文件中获取输入流,并且在每次调用.next()时,我希望它从数组中返回一个对象,直到用完对象或失败为止。

这可能吗?

用例:我有一个带有json数组的大文件,其中填充有大量具有不同架构的对象。我想一次获得一个对象,以避免将所有内容加载到内存中。

编辑:

我完全忘了提。我的输入是随着时间的推移添加到的字符串。随着时间的推移,它会慢慢累积json。我希望能够通过从字符串中删除已解析对象的对象来解析它。

但是我想那没关系!我可以手动执行此操作,只要jsonParser将索引返回到字符串中即可。


阅读 569

收藏
2020-07-27

共1个答案

一尘不染

您正在寻找的是所谓的Jackson Streaming
API
。这是使用Jackson流API的代码片段,可以帮助您实现所需的功能。

JsonFactory factory = new JsonFactory();
JsonParser parser = factory.createJsonParser(new File(yourPathToFile));

JsonToken token = parser.nextToken();
if (token == null) {
    // return or throw exception
}

// the first token is supposed to be the start of array '['
if (!JsonToken.START_ARRAY.equals(token)) {
    // return or throw exception
}

// iterate through the content of the array
while (true) {

    token = parser.nextToken();
    if (!JsonToken.START_OBJECT.equals(token)) {
        break;
    }
    if (token == null) {
        break;
    }

    // parse your objects by means of parser.getXxxValue() and/or other parser's methods

}
2020-07-27