Gson-streaming

提供:Dev Guides
移動先:案内検索

Gson-ストリーミング

ストリーミングAPIは、トークンごとにJSONトークンを読み取るために使用されます。 JSONコンテンツを個別のイベントとして読み書きします。 JsonReader および JsonWriter は、 JsonToken と呼ばれるトークンとしてデータを読み取り/書き込みします。

JSONを処理する3つのアプローチの中で最も強力なアプローチです。 オーバーヘッドは最も低く、読み取り/書き込み操作では非常に高速です。 XMLのStaxパーサーに似ています。

この章では、GSONストリーミングAPIを使用してJSONデータを読み取る方法を紹介します。 ストリーミングAPIはトークンの概念で動作し、Jsonのすべての詳細は慎重に処理されます。

//create JsonReader object and pass it the json source or json text.
JsonReader reader = new JsonReader(new StringReader(jsonString));

//start reading json
reader.beginObject();

//get the next token
JsonToken token = reader.peek();

//check the type of the token
if (token.equals(JsonToken.NAME)) {
  //get the current token
   fieldname = reader.nextName();
}

動作中の JsonReader を見てみましょう。 C:\> GSON_WORKSPACEに GsonTester という名前のJavaクラスファイルを作成します。

ファイル-GsonTester.java

import java.io.IOException;
import java.io.StringReader;

import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonToken;

public class GsonTester {
   public static void main(String args[]) {

      String jsonString =
         "{\"name\":\"Mahesh Kumar\", \"age\":21,\"verified\":false,\"marks\": [100,90,85]}";
      JsonReader reader = new JsonReader(new StringReader(jsonString));
      try {
         handleJsonObject(reader);
      }
      catch (IOException e) {
         e.printStackTrace();
      }
   }

   private static void handleJsonObject(JsonReader reader) throws IOException {
      reader.beginObject();
      String fieldname = null;

      while (reader.hasNext()) {
         JsonToken token = reader.peek();

         if (token.equals(JsonToken.BEGIN_ARRAY)) {
            System.out.print("Marks [ ");
            handleJsonArray(reader);
            System.out.print("]");
         } else if (token.equals(JsonToken.END_OBJECT)) {
            reader.endObject();
            return;
         } else {
            if (token.equals(JsonToken.NAME)) {
              //get the current token
               fieldname = reader.nextName();
            }

            if ("name".equals(fieldname)) {
              //move to next token
               token = reader.peek();
               System.out.println("Name: "+reader.nextString());
            }

            if("age".equals(fieldname)) {
              //move to next token
               token = reader.peek();
               System.out.println("Age:" + reader.nextInt());
            }

            if("verified".equals(fieldname)) {
              //move to next token
               token = reader.peek();
               System.out.println("Verified:" + reader.nextBoolean());
            }
         }
      }
   }

   private static void handleJsonArray(JsonReader reader) throws IOException {
      reader.beginArray();
      String fieldname = null;

      while (true) {
         JsonToken token = reader.peek();

         if (token.equals(JsonToken.END_ARRAY)) {
            reader.endArray();
            break;
         } else if (token.equals(JsonToken.BEGIN_OBJECT)) {
            handleJsonObject(reader);
         } else if (token.equals(JsonToken.END_OBJECT)) {
            reader.endObject();
         } else {
            System.out.print(reader.nextInt() + " ");
         }
      }
   }
}

結果を検証する

次のように javac コンパイラを使用してクラスをコンパイルします-

C:\GSON_WORKSPACE>javac GsonTester.java

今すぐ GsonTester を実行して結果を確認します-

C:\GSON_WORKSPACE>java GsonTester

出力を確認します。

Name: Mahesh Kumar
Age:21
Verified:false
Marks [ 100 90 85 ]