Gson 流 Gson树模型 Gson序列化示例 Streaming API用于通过令牌读取JSON令牌。它将JSON内容读写为离散事件。 JsonReader 和 JsonWriter 将数据读/写为令牌,称为 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(); } 例 让我们看看 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 ] Gson树模型 Gson序列化示例