1. 程式人生 > >完全理解Gson(3):Gson反序列化

完全理解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-10isbn-13authors。但是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介面例項,並且註冊到GsonBuilderJava文件)中。下面的例子展示了我們實現的 JsonDeserializer

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

相關推薦

完全理解Gson3Gson序列

本文延續前一篇文章,繼續介紹簡單基本的Gson用法。這篇文章我們將介紹如何將複雜的JSON物件解析為Java物件,其中Java物件的結構可以與JSON物件不一致。我們還會看到如何使用Gson反序列化器(JsonDeserializer Java文件)將JSON物件對映

新手學python3yield與序列

1 Yield生成器        Yield是我在其他語言中沒有見過的一個屬性,算是python的一大特色,用好之後可以使程式碼更簡潔。考慮一個簡單的例子,檔案的遍歷。要遍歷一個目錄下的所有檔案需要遞迴的操作。如果我們只是單純的列印檔名,我們可以在遞迴的過程中完成,每當發

深入理解Plasma3Plasma MVP

這一系列文章將圍繞以太坊的二層擴容框架,介紹其基本執行原理,具體操作細節,安全性討論以及未來研究方向等。本篇文章主要介紹 Plasma 的一個最小實現 Plasma MVP(Minima Viable Plasma)。 在上一篇文章中我們已經理解了 Plasma 中的

理解Docker3Docker 使用 Linux namespace 隔離容器的執行環境

來源:http://www.cnblogs.com/sammyliu/p/5878973.html 1. 基礎知識:Linux namespace 的概念     Linux 核心從版本 2.4.19 開始陸續引入了 namespace 的概念。其目的是將某個特定的全域性

理解OpenShift3網路之 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 集合深入理解3Collection

今天心情有點粉,來學學 Collection 吧! 什麼是集合? 集合,或者叫容器,是一個包含多個元素的物件; 集合可以對資料進行儲存,檢索,操作; 它們可以把許多個體組織成一個整體: 比如一副撲克牌(許多牌組成的集合); 比如一個電話本

理解 OpenStack 高可用HA3Neutron 分散式虛擬路由Neutron Distributed Virtual Routing

本系列會分析OpenStack 的高可用性(HA)概念和解決方案:     Neutron 作為 OpenStack 一個基礎性關鍵服務,高可用性(HA)和擴充套件性是它的基本需求之一。對 neutron server 來說,因為它是無狀態的,我們可以使用負載均衡器(Load B

Pro Android學習筆記一三七Home Screen Widgets3配置Activity

map onclick widgets info xtra ces extends height appwidget 文章轉載僅僅能用於非商業性質,且不能帶有虛擬貨幣、積分、註冊等附加條件。轉載須註明出處http://blog.csdn.net/flowingfly

Windows Phone開發3棋子未動,先觀全局

csdn xaml hone activate 處理程序 為什麽 作業 單擊 不執行 在進行WP開發之前,與其它開發技術一樣,我們需要簡單了解一個WP應用序的生命周期,我們不一定要深入了解,但至少要知道在應用程序生命周期內的每一階段,我們應當做什麽,不推薦哪些操作等,這也是

Akka3 Actor監管 - 細述BackoffSupervisor

system 中一 println setting rtc logging info 其它 text 在上一篇討論中我們談到了監管:在Akka中就是一種直屬父子監管樹結構,父級Actor負責處理直屬子級Actor產生的異常。當時我們把BackoffSuperviso

springCloud3微服務的註冊與發現Eureka

springcloud 微服務的註冊與發現 eureka 一、簡介服務消費者需要一個強大的服務發現機制,服務消費者使用這種機制獲取服務提供者的網絡信息。即使服務提供者的信息發生變化,服務消費者也無須修改配置。服務提供者、服務消費者、服務發現組件三者之間的關系大致如下: 1.各個微服務在啟動時,將自

[Golang] 從零開始寫Socket Server3 對長、短連接的處理策略模擬心跳

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設計模式學習3Singleton pattern

blog ora 參考 擁有 沒有 _屬性 ces cti ttr 參考了其他的博客:http://ghostfromheaven.iteye.com/blog/1562618 #-*- encoding=utf-8 -*- print ‘--------------

【H.264/AVC視頻編解碼技術具體解釋】十三、熵編碼算法3CAVLC原理

統計 視頻編解碼 高效 png h264 轉化 頻率 遊程編碼 而且 《H.264/AVC視頻編解碼技術具體解釋》視頻教程已經在“CSDN學院”上線。視頻中詳述了H.264的背景、標準協議和實現,並通過一個實戰project的形式對H.264的標準進行解

tcpdump 學習3MySQL Query

說明 server gen rollback 命令 復雜 pro 關於 col 在MySQL線上環境我們一般只打開了binary log,slow log,有時我們需要查看general log呢?因為該log記錄所有的請求,打開該日誌肯定給磁盤造成很大壓力,IO能力有所下

Web是如何工作的3HTTP&REST

medium 方法 post ogg 兩臺 gecko 希望 種類 正常 原文地址:https://medium.freecodecamp.org/how-the-web-works-part-iii-http-rest-e61bc50fa0a 我們在第一篇文章中介紹了

Linux日常管理技巧3Linux網絡相關和防火墻

127.0.0.1 網絡 修改網卡 cal 網卡ip lis oot back col 一、Linux網絡相關 1. ifconfig 查看網卡IP ifconfig命令被用於配置和顯示Linux內核中網絡接口的網絡參數。用ifconfig命令配置的網卡信息,在網卡重啟後機