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(); }
1. 范例
讓我們看看 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() + " "); } } } }
2. 驗證結果
使用 javac 編譯器編譯類如下:
c:\gson_workspace>javac gsontester.java
現在運行 gsontester 查看結果:
c:\gson_workspace>java gsontester
驗證輸出。
name: mahesh kumar age:21 verified:false marks [ 100 90 85 ]