Gson數據流

Streaming API用於通過令牌讀取JSON令牌。 它讀取和寫入JSON內容作為離散事件。 JsonReaderJsonWriter將數據讀取/寫入令牌,稱為JsonToken

這是處理JSON的三種方法中最強大的方法。 它具有最低的開銷,並且在讀/寫操作中速度非常快。 它類似於用於XML的Stax解析器。

在本章中,我們將展示使用GSON streaming API來讀取JSON數據。 Streaming 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的作用。 創建一個名為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\":\"Maxsu\", \"age\":26,\"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() + " ");
         }
      }
   }
}

執行上面示例代碼,得到以下結果 -

Name: Maxsu
Age:26
Verified:false
Marks [ 100 90 85 ]

上一篇: Gson樹模型 下一篇: Gson序列化示例