转载自:https://springboot.io/t/topic/926
叙述
Fastjson提供了Stream api,用户序列化/反序列化超大的json。
解决方案
序列化超大的JSON数组
JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json")); // 把json数组写入到哪里
writer.startArray(); // 先调用
for (int i = 0; i < 1000 * 1000; ++i) {
writer.writeValue(new VO()); // 挨个写入多个json对象
}
writer.endArray(); // 序列化完毕后调用
writer.close()
反序列化超大的JSON数组
JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json")); // 从哪里读取json数组
reader.startArray(); // 先调用
while(reader.hasNext()) {
VO vo = reader.readObject(VO.class); // 反序列化数组中的每一个json对象
// handle vo ...
}
reader.endArray(); // 反序列化完毕后调用
reader.close();
序列化超大的JSON对象
JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json")); // 把json对象写入到哪里
writer.startObject(); //先调用
for (int i = 0; i < 1000 * 1000; ++i) {
writer.writeKey("x" + i); // 挨个写入key
writer.writeValue(new VO()); // 挨个写入value
}
writer.endObject(); // 序列化完毕后调用
writer.close();
反序列化超大的JSON对象
JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
reader.startObject(); // 先调用
while(reader.hasNext()) {
String key = reader.readString(); // 第一次读key
String value = reader.readString(); // 第二次读value
// handle vo ...
// VO vo = reader.readObject(VO.class); // 序列化为对象
// reader.readInteger();
// reader.readLong()
}
reader.endObject(); // 反序列化完毕后调用
reader.close();