[英]Parsing Huge JSON with Jackson
考虑一个巨大的JSON结构,如 -
{"text": "very HUGE text here.."}
我将此JSON存储为名为say json
的ObjectNode
对象。
现在我尝试从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.