Fastjson处理超大的json文本

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

 

posted @ 2021-02-20 16:20  櫻時雨  阅读(1591)  评论(0编辑  收藏  举报