目录

Gson - 流媒体( Streaming)

Streaming API用于通过令牌读取JSON令牌。 它将JSON内容读写为离散事件。 JsonReaderJsonWriter将数据读/写为令牌,称为JsonToken

它是处理JSON的三种方法中最强大的方法。 它具有最低的开销,并且在读/写操作中非常快。 它类似于XML的Stax解析器。

在本章中,我们将展示使用GSON流API来读取JSON数据。 Streaming API与token的概念一起使用,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(); 
}

例子 (Example)

让我们看看JsonReader情况。 在C:\“GSON_WORKSPACE中创建名为GsonTester的Java类文件。

File: 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() + " ");            
         } 
      } 
   } 
}

验证结果 (Verify the result)

使用javac编译器编译类如下 -

C:\GSON_WORKSPACE>javac GsonTester.java 

现在运行GsonTester查看结果 -

C:\GSON_WORKSPACE>java GsonTester 

验证输出。

Name: Mahesh Kumar 
Age:21 
Verified:false 
Marks [ 100 90 85 ] 
↑回到顶部↑
WIKI教程 @2018