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