[英]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.