轉自: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();