如何在Java中以流的形式读取大的Json字符串值

问题描述 投票:0回答:1

我收到一个 JSON DTO,其中一个字段包含 b64 文件。

该文件可能相当大(100MiB+ - 不要问),我尝试将其作为 JSON 中的流读取,以减少内存负载。 JSON 本身只有三个不同的字段,非常小。

请注意,我已经能够将 JSON 本身作为流读取并迭代其标记,但我无法将值本身作为流检索。

基本的

JsonParser.getText(writer)
会执行
.getText
将所有内容加载到内存中,并且每个解决方案似乎总是在某个时刻将整个值加载到内存中(或者也许我的 google-fu 没有达到标准)。

java json inputstream
1个回答
0
投票

是的,您可以使用不加载整个 JSON int 内存的方法

while (!jsonParser.isClosed()) {
    JsonToken token = jsonParser.nextToken();

    // process the tokens one by one
}

这不会将整个 JSON 加载到内存中,而是按顺序处理字段和值等标记。

另一种选择是使用 GSON,但您已经使用 Jackson。有了 GSON 就可以了

while (jsonReader.hasNext()) {
    String name = jsonReader.nextName(); // Get field name

    // Depending on the type of the value, process it
    if (reader.peek().name().equals("STRING")) {
        String value = reader.nextString();
    } else if (reader.peek().name().equals("NUMBER")) {
        double value = reader.nextDouble();
    }
    
    // etc. you process one by one
}

GSON 的界面更加时尚。

© www.soinside.com 2019 - 2024. All rights reserved.