繁体   English   中英

用杰克逊解析巨大的JSON

[英]Parsing Huge JSON with Jackson

考虑一个巨大的JSON结构,如 -

{"text": "very HUGE text here.."}

我将此JSON存储为名为say jsonObjectNode对象。

现在我尝试从ObjectNode提取此文本。

String text = json.get("text").asText()

这个JSON的大小可以是4-5 MB。 当我运行这段代码时,我得不到结果(程序一直在执行)。

上述方法适用于小型和普通大小的字符串。 还有其他最佳实践从JSON中提取大量数据吗?

用jackson(fastxml)测试,7MB json节点可以在200毫秒内解析

    ObjectMapper objectMapper = new ObjectMapper();
    InputStream is = getClass().getResourceAsStream("/test.json");
    long begin = System.currentTimeMillis();
    Map<String,String> obj = objectMapper.readValue(is, HashMap.class);
    long end = System.currentTimeMillis();
    System.out.println(obj.get("value").length() + "\t" + (end - begin));

输出为:7888888 168

试着升级你杰克逊?

也许你的默认堆大小太小:如果输入是5兆UTF-8编码,它的Java String通常需要10兆内存( char是16位,英语字符的大多数UTF-8是单字节)。 如果必须将值作为Java String处理,那么无论JSON库如何,您都无法做到这一点。 你需要足够的内存来处理值和剩余的处理。 此外,由于Java堆被分成不同的代,64兆可能或可能不起作用:因为10兆需要连续,它可能在旧一代中分配。

所以:看看尝试更大的堆大小,看看你需要多少。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM