Gson 流
gson 流
streaming api用于通過令牌讀取 json 令牌。它將 json 內(nèi)容讀寫為離散事件。 jsonreader 和 jsonwriter 將數(shù)據(jù)讀/寫為令牌,稱為 jsontoken 。
它是處理 json 的三種方法中最強大的方法。它具有最低的開銷,并且在讀/寫操作中非常快。它類似于 xml 的 stax 解析器。
在本章中,我們將展示使用gson流api來讀取json數(shù)據(jù)。streaming api與token的概念一起使用,json的每個細節(jié)都要謹慎處理。
//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中創(chuàng)建名為 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. 驗證結(jié)果
使用 javac 編譯器編譯類如下:
c:\gson_workspace>javac gsontester.java
現(xiàn)在運行 gsontester 查看結(jié)果:
c:\gson_workspace>java gsontester
驗證輸出。
name: mahesh kumar age:21 verified:false marks [ 100 90 85 ]
相關文章
- JDBC 教程
- JDBC 驅(qū)動類型
- JDBC 連接數(shù)據(jù)庫范例
- JDBC 連接數(shù)據(jù)庫步驟
- JDBC Statement, PreparedStatement 和 CallableStatement
- JDBC ResultSet 結(jié)果集
- JDBC Resultset 結(jié)果集范例
- JDBC 事務保存點范例
- Scala 教程
- Scala 簡介
- Scala 類和對象
- Scala 文件 I/O
- Spring 教程
- Spring 模塊
- Spring 依賴注入
- Spring 自動裝配
- Spring MVC教程
- Spring MVC表單標簽庫
- Spring security