转载自:Fastjson处理超大的json文本 - 技术交流 - Spring Boot中文社区
叙述
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();