Fastjson API Stream
Fastjson当需要处理超大JSON文本时,需要Stream API,在fastjson-1.1.32版本中开始提供Stream API。
如何序列化
超大JSON数组序列化
如果你的JSON格式是一个巨大的JSON数组,有很多元素,则先调用startArray,然后挨个写入对象,然后调用endArray。
JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json"));
writer.startArray();
for (int i = 0; i < 1000 * 1000; ++i) {
writer.writeValue(new VO());
}
writer.endArray();
writer.close();
超大JSON对象序列化
如果你的JSON格式是一个巨大的JSONObject,有很多Key/Value对,则先调用startObject,然后挨个写入Key和Value,然后调用endObject
JSONWriter writer = new JSONWriter(new FileWriter("/tmp/huge.json"));
writer.startObject();
for (int i = 0; i < 1000 * 1000; ++i) {
writer.writeKey("x" + i);
writer.writeValue(new VO());
}
writer.endObject();
writer.close();
反序列化
JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
reader.startArray(); //数组反序列化
reader.startObject();//对象反序列化
while(reader.hasNext()) {
VO vo = reader.readObject(VO.class);
// handle vo ...
}
reader.endArray();
reader.close();
总结
Fastjson近期也爆出有安全漏洞,出现安全漏洞后阿里团队也第一时间对Fastjson的漏洞进行了修复,修复后不知道大家的项目是否有做升级。网上也有人提议说是废弃Fastjson了,用回原来的JackJson,本人觉得其实用那种没有确定的说是是好或坏,他仅仅只是一个工具类罢了,也不需要再去做比较。
如有问题,欢迎有问题及时交流。