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