Fastjson處理超大的json文本


轉自:https://springboot.io/t/topic/926

Fastjson處理超大的json文本

直接使用Fastjson的getJsonObject,getJsonArray等在處理超大的json數據時效率不夠,

Fastjson提供了Stream api,用戶序列化/反序列化超大的json。

序列化超大的JSON數組

1 JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json")); // 把json數組寫入到哪里
2 writer.startArray();  // 先調用
3 for (int i = 0; i < 1000 * 1000; ++i) {
4       writer.writeValue(new VO());  // 挨個寫入多個json對象
5 }
6 writer.endArray();  // 序列化完畢后調用
7 writer.close()

反序列化超大的JSON數組

1 JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json")); // 從哪里讀取json數組
2 reader.startArray();  // 先調用
3 while(reader.hasNext()) {
4       VO vo = reader.readObject(VO.class);   // 反序列化數組中的每一個json對象
5       // handle vo ...
6 }
7 reader.endArray();  // 反序列化完畢后調用
8 reader.close();

序列化超大的JSON對象

1 JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json")); // 把json對象寫入到哪里
2 writer.startObject();  //先調用
3 for (int i = 0; i < 1000 * 1000; ++i) {
4       writer.writeKey("x" + i);         // 挨個寫入key
5       writer.writeValue(new VO()); // 挨個寫入value
6 }
7 writer.endObject();  // 序列化完畢后調用
8 writer.close();

反序列化超大的JSON對象

 1 JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
 2 reader.startObject();  // 先調用
 3 while(reader.hasNext()) {
 4       String key = reader.readString();                // 第一次讀key
 5       String value = reader.readString();            // 第二次讀value
 6       // handle vo ...
 7       // VO vo = reader.readObject(VO.class);        // 序列化為對象
 8       // reader.readInteger();
 9       // reader.readLong()    
10 }
11 reader.endObject();  // 反序列化完畢后調用
12 reader.close();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM