簡體   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