Fastjson API ストリーム


Fastjson は、非常に大きな JSON テキストを処理する必要がある場合、Stream API を必要とします。Stream API は、fastjson-1.1.32 バージョンで提供されます。

シリアル化

非常に大きな JSON 配列のシリアル化

JSON 形式は多くの要素を含む巨大な JSON 配列であり、最初に startArray を呼び出し、次にオブジェクトを 1 つずつ書き込み、最後に 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 形式が多数の Key/Value ペアを持つ巨大な JSONObject である場合、最初に startObject を呼び出します。次に、Key と Value を 1 つずつ書き込んで、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();
  while(reader.hasNext()) {
        VO vo = reader.readObject(VO.class);
        // handle vo ...
  }
  reader.endArray();
  reader.close();

  JSONReader reader = new JSONReader(new FileReader("/tmp/huge.json"));
  reader.startObject();
  while(reader.hasNext()) {
        String key = reader.readString();
        VO vo = reader.readObject(VO.class);
        // handle vo ...
  }
  reader.endObject();
  reader.close();