完全理解Gson(3):Gson反序列化
本文延續前一篇文章,繼續介紹簡單基本的Gson用法。這篇文章我們將介紹如何將複雜的JSON物件解析為Java物件,其中Java物件的結構可以與JSON物件不一致。我們還會看到如何使用Gson反序列化器(JsonDeserializer
Java文件)將JSON物件對映為Java物件。
觀察
請注意,文中解析(parse)與反序列化(deserialise)將互換使用。對於不熟悉Gson的讀者,鼓勵您先閱讀簡單Gson用例 ,熟悉之後再開始閱讀本篇內容。
一個簡單的例項
比方說,我們有如下JSON物件,它包含兩位著名作者的暢銷Java書(Amazon)。
1 2 3 4 5 6 |
{
'title' :
'Java
Puzzlers: Traps, Pitfalls, and Corner Cases' ,
'isbn-10' :
'032133678X' ,
'isbn-13' :
'978-0321336781' ,
'authors' :
[ 'Joshua
Bloch' ,
'Neal
Gafter' ]
}
|
上面的JSON物件包括4個欄位,其中一個是陣列。這些欄位代表了我們的書籍。使用簡單Gson例項中討論的方法可能產生一個問題。預設情況下,Gson期望Java類中的變數名與JSON查詢到的名稱一樣。因此,我們需要包含如下域名的類:title
isbn-10
、isbn-13
和authors
。但是Java語言規範
(第六章)指出,Java變數名不能包含減號(-
)。
我們將在接下來的例項中看到如何使用JsonDeserializer
完全控制JSON的解析。另外我們也可以使用Gson註解例項中提到的註解。註解控制JSON解析的能力稍弱,但是使用簡單便於理解。當然,註解也有它們的限制,不能解決這裡提到的所有問題。
考慮下面簡單的Java物件。
1 2 3 4 5 6 7 8 9 10 11 |
package
com.javacreed.examples.gson.part1; public
class
Book {
private
String[] authors;
private
String isbn10;
private
String isbn13;
private
String title;
//
Methods removed for brevity
}
|
Java物件用來儲存之前JSON物件中的書籍資訊。注意,JSON物件有4個欄位,每個變數對應一個JSON欄位。這兩個物件(Java和JSON)的結構不必一致。Java物件的結構可以與JSON物件不同。
為了將JSON物件解析成Java物件,我們需要建立自己的 JsonDeserializer
介面例項,並且註冊到GsonBuilder
(Java文件)中。下面的例子展示了我們實現的 JsonDeserializer
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
相關推薦完全理解Gson(3):Gson反序列化本文延續前一篇文章,繼續介紹簡單基本的Gson用法。這篇文章我們將介紹如何將複雜的JSON物件解析為Java物件,其中Java物件的結構可以與JSON物件不一致。我們還會看到如何使用Gson反序列化器(JsonDeserializer Java文件)將JSON物件對映 新手學python(3):yield與序列化1 Yield生成器 Yield是我在其他語言中沒有見過的一個屬性,算是python的一大特色,用好之後可以使程式碼更簡潔。考慮一個簡單的例子,檔案的遍歷。要遍歷一個目錄下的所有檔案需要遞迴的操作。如果我們只是單純的列印檔名,我們可以在遞迴的過程中完成,每當發 深入理解Plasma(3):Plasma MVP這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本執行原理,具體操作細節,安全性討論以及未來研究方向等。本篇文章主要介紹 Plasma 的一個最小實現 Plasma MVP(Minima Viable Plasma)。 在上一篇文章中我們已經理解了 Plasma 中的 理解Docker(3):Docker 使用 Linux namespace 隔離容器的執行環境來源:http://www.cnblogs.com/sammyliu/p/5878973.html 1. 基礎知識:Linux namespace 的概念 Linux 核心從版本 2.4.19 開始陸續引入了 namespace 的概念。其目的是將某個特定的全域性 理解OpenShift(3):網路之 SDN理解OpenShift(1):網路之 Router 和 Route 理解OpenShift(2):網路之 DNS(域名服務) 理解OpenShift(3):網路之 SDN 1. 概況 OpenShift SDN 實現了符合Kubernetes CNI 要求的 OpenShift MFC介面程式設計基礎(17):文件序列化上一篇:MFC介面程式設計基礎(16):文件、檢視、框架 下一篇:MFC介面程式設計基礎(18):文件檢視結構應用程式例子(Ex_DocView) 序列化定義 MFC文件-檢視結構中,序列化機制可以實現記憶體中 (轉)Weblogic之反序列化高危漏洞轉自:http://www.sohu.com/a/154670296_99890213?qq-pf-to=pcqq.c2c 我選擇的是第五種方法解決的。 一、WebLogic Server Security Alert 安全問題描述 WebLogic Server反序列化安全漏洞補丁:C Java 集合深入理解(3):Collection今天心情有點粉,來學學 Collection 吧! 什麼是集合? 集合,或者叫容器,是一個包含多個元素的物件; 集合可以對資料進行儲存,檢索,操作; 它們可以把許多個體組織成一個整體: 比如一副撲克牌(許多牌組成的集合); 比如一個電話本 理解 OpenStack 高可用(HA)(3):Neutron 分散式虛擬路由(Neutron Distributed Virtual Routing)本系列會分析OpenStack 的高可用性(HA)概念和解決方案: Neutron 作為 OpenStack 一個基礎性關鍵服務,高可用性(HA)和擴充套件性是它的基本需求之一。對 neutron server 來說,因為它是無狀態的,我們可以使用負載均衡器(Load B Pro Android學習筆記(一三七):Home Screen Widgets(3):配置Activitymap onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly Windows Phone開發(3):棋子未動,先觀全局csdn xaml hone activate 處理程序 為什麽 作業 單擊 不執行 在進行WP開發之前,與其它開發技術一樣,我們需要簡單了解一個WP應用序的生命周期,我們不一定要深入了解,但至少要知道在應用程序生命周期內的每一階段,我們應當做什麽,不推薦哪些操作等,這也是 Akka(3): Actor監管 - 細述BackoffSupervisorsystem 中一 println setting rtc logging info 其它 text 在上一篇討論中我們談到了監管:在Akka中就是一種直屬父子監管樹結構,父級Actor負責處理直屬子級Actor產生的異常。當時我們把BackoffSuperviso springCloud(3):微服務的註冊與發現(Eureka)springcloud 微服務的註冊與發現 eureka 一、簡介服務消費者需要一個強大的服務發現機制,服務消費者使用這種機制獲取服務提供者的網絡信息。即使服務提供者的信息發生變化,服務消費者也無須修改配置。服務提供者、服務消費者、服務發現組件三者之間的關系大致如下: 1.各個微服務在啟動時,將自 [Golang] 從零開始寫Socket Server(3): 對長、短連接的處理策略(模擬心跳)microsoft ted 每次 range 點擊 關閉 ade 而在 href 通過前兩章,我們成功是寫出了一套湊合能用的Server和Client,並在二者之間實現了通過協議交流。這麽一來,一個簡易的socket通訊框架已經初具雛形了,那麽我們接下來做的 python基礎(3):輸入輸出與運算符http 占位符 str png blog 方法 image 16px 提示 今天總結一下最基礎的輸入輸出和運算符 輸入: python3裏都是input("") input() name = input() #輸入的值會直接賦值給name name = i PYTHON設計模式學習(3):Singleton patternblog ora 參考 擁有 沒有 _屬性 ces cti ttr 參考了其他的博客:http://ghostfromheaven.iteye.com/blog/1562618 #-*- encoding=utf-8 -*- print ‘-------------- 【H.264/AVC視頻編解碼技術具體解釋】十三、熵編碼算法(3):CAVLC原理統計 視頻編解碼 高效 png h264 轉化 頻率 遊程編碼 而且 《H.264/AVC視頻編解碼技術具體解釋》視頻教程已經在“CSDN學院”上線。視頻中詳述了H.264的背景、標準協議和實現,並通過一個實戰project的形式對H.264的標準進行解 tcpdump 學習(3):MySQL Query說明 server gen rollback 命令 復雜 pro 關於 col 在MySQL線上環境我們一般只打開了binary log,slow log,有時我們需要查看general log呢?因為該log記錄所有的請求,打開該日誌肯定給磁盤造成很大壓力,IO能力有所下 (譯)Web是如何工作的(3):HTTP&RESTmedium 方法 post ogg 兩臺 gecko 希望 種類 正常 原文地址:https://medium.freecodecamp.org/how-the-web-works-part-iii-http-rest-e61bc50fa0a 我們在第一篇文章中介紹了 Linux日常管理技巧(3):Linux網絡相關和防火墻127.0.0.1 網絡 修改網卡 cal 網卡ip lis oot back col 一、Linux網絡相關 1. ifconfig 查看網卡IP ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機 |