【Java Web】: GSON 資料格式詳解
在上一講中我們講到了 JSON資料格式的內容,這一講我們來講一下Google對JSON這種格式的支援。
我們看到Java中的JSON庫除了org.json之外還有一個 google-gson這個也是Java中很常用的json庫,它是google自定義的json庫,功能很強大,支援泛型,它也可以實現從json到java物件的裝換,也可以從java物件轉換成json資料。最重要的是Gson可以與任意的Java物件一起工作包括已經存在的你沒法獲取到它原始碼的物件。(也就是有些物件提供給你是以Jar檔案或者.class檔案的形式提供給你的,這樣你就只能使用這個物件,卻無法去修改它的原始碼)
現在很多開源的專案都會可以轉換Java物件成JSON,然後,他們中的很多都要求你在獲得原始碼中加上註解的方式完成的,而在實際開發中我們也有可能沒辦法訪問到專案的原始碼,而且這些開源專案而沒法完全支援泛型。Gson考慮到上面兩點的重要性而設計出來的。
更多關於Gson內容檢視其主頁:http://code.google.com/p/google-gson/
GSON的作用主要是完成 JSON資料格式與Java物件的互相轉換
1. 下載GSON這個開源專案以及檢視它的API文件
基本上我們一般是用com.google.gson這個類就可以解決大多數的問題。其中我們最長用的是這兩個方法:
1) fromJson() :從JSON到Java物件
2) toJson():從Java物件轉換成Json的字串
2. 下面我們就來學習一下GSON的相關用法
1) 首先要在MyEclipse中匯入GSON的jar檔案
在專案中右鍵 ---> Build Path ---> Configure Build Path ---> Libraries標籤頁---> add External JARs ---> 指定外部Jar檔案所在目錄 ---> OK. 如下圖所示
2) 程式Demo如下,先寫一個Person類,用來獲取Person物件的屬性
Person.java
GsonTest.java 講person物件轉換為JSON資料,此時person物件有四個屬性。package com.ahuier.json; public class Person { private String username; private String password; private int age; private String address; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
程式執行結果如下:打印出來的是一個完全符合JSON格式的字串。所以使用GSON是特別方便的。package com.ahuier.json; import com.google.gson.Gson; public class GsonTest { public static void main(String[] args) { Person person = new Person(); person.setUsername("AHuier"); person.setPassword("123456"); person.setAddress("XIAMEN"); person.setAge(30); // 如果客戶端如JavaScript需要使用到這些物件,直接使用不行,所以需要用GSON來做橋樑 // 用gson將物件轉換成Json的字串 Gson gson = new Gson(); String result = gson.toJson(person); System.out.println(result); } }
{"username":"AHuier","password":"123456","age":30,"address":"XIAMEN"}
3) 在上述程式的基礎上我們在Person類裡面新增一個list,然後往list中新增三條資料,實驗一下GSON處理person物件轉換成JSON資料格式是什麼樣的。
1. Person.java現在對於person物件來說有三個普通的屬性,還有一個集合的屬性,集合裡面有三個字串.
2. GsonTest.javapackage com.ahuier.json; import java.util.ArrayList; import java.util.List; public class Person { private String username; private String password; private int age; private String address; private List<String> list = new ArrayList<String>(); public List<String> getList() { return list; } public void setList(List<String> list) { this.list = list; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
程式執行結果如下,很顯然它將List轉換為陣列的形式了,下面就是將person物件轉換成JSON的資料格式了。package com.ahuier.json; import com.google.gson.Gson; public class GsonTest { public static void main(String[] args) { Person person = new Person(); person.setUsername("AHuier"); person.setPassword("123456"); person.setAddress("XIAMEN"); person.setAge(30); // Json中沒有集合的概念,顯然這邊list在JSON中都會轉換成陣列的形式。 person.getList().add("YouNi"); person.getList().add("AHui"); person.getList().add("AHuier|YouNi"); Gson gson = new Gson(); String result = gson.toJson(person); System.out.println(result); } }
{"username":"AHuier","password":"123456","age":30,"address":"XIAMEN","list":["YouNi","AHui","AHuier|YouNi"]}
關注下一篇博文,下一我博文我會對JSON與GSON在Android客戶端與服務端的應用做一個統一的梳理,敬請關注。
相關推薦
【Java Web】: GSON 資料格式詳解
在上一講中我們講到了 JSON資料格式的內容,這一講我們來講一下Google對JSON這種格式的支援。 我們看到Java中的JSON庫除了org.json之外還有一個 google-g
【Java Web】: JSON 資料格式詳解
JSON (JavaScript Object Notation) JavaScript物件圖,它是由Douglas Crockford(道格拉斯·克洛克福特)發明的。 JSON與XML一樣
【Redis學習】:set資料型別詳解
set資料結構 常用命令 新增/刪除元素 sadd key values[value1 value2 ...] 向set中新增資料,如果該key的值已有不會重複新增。 srem
【Redis學習】:list資料型別詳解
list資料結構 在redis中,list資料結構是按照插入順序的字串連結串列,和資料結構中的普通連結串列一樣,我們可以在其頭部(left)和尾部(right)新增新的元素。在插入時,如果該鍵並不
【Java Web】——配置檔案的格式之xml和properties的區分
package testXMLDemo; import org.dom4j.*; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import java.io.File; import java.io.FileWriter; imp
【java web】springMVC框架實現用多選框批量刪除表資料功能
本功能是基於springMVC+mybatis框架實現的,實現過程如下: jsp程式碼: <c:forEach items="${requestScope.movies}" var="movie" varStatus="status"> <
【java web】Servlet生命周期
控制臺顯示 encoding port protect err 我們 sys 技術 vax 在Java web中 Servlet 是根基。雖然工作中幾乎沒人再去寫Servlet了,框架為我們完成了這些工作。我們只要專註於業務邏輯的實現。但是理解Servlet還是很有必要的。
【java Web】Tomcat的安裝與配置
一、JavaWeb的應用的概念 在Sun的Java Servlet規範中,對Java Web應用作了這樣的定義:“Java Web應用是由一組Servlet、HTML頁、類、以及其他可以被繫結的資源構成。它可以在各種供應商提供的實現Servlet規範的Servlet容器中執
【Java Web】Spring IOC機制
POJO POJO的全稱有兩個:plain old java object 、plain ordinary java object。我們可以把POJO類看做是簡單的JavaBean類(具有一系列Getter、Setter的方法)。 IOC IOC的全稱是:Inv
【Java Web】Error configuring application listener of class org.springframework.web.util.IntrospectorC
maven專案移到另外一臺電腦,import匯入專案後,報錯:Error configuring application listener of class org.springframework.web.util.IntrospectorCleanupLis 解決方式: 1.開啟專案的bu
【java web】JSP中form表單中文亂碼的解決嘗試
在人生中的第一個實際專案中,我遇到了一個很困擾的問題,就是在內管系統中,我做了一個測試頁面,用來測試向對方介面傳遞引數,我使用了jsp的form表單向後端傳遞引數,在本地啟動服務,進行測試都沒有問題,沒有出現中文亂碼的情況,但是提交到測試環境進行驗證時,卻出現了
【Java Web】Spring Annotation
1、@Required @Required 註釋應用於 bean 屬性的 setter 方法,標有該註釋的setter方法必須出現在Spring xml檔案中初始化,否則容器就會丟擲一個 BeanInitializationException 異常。 2、@Autowired @
【Java Web】Spring中Bean的使用
Bean的定義 被稱作 bean 的物件是構成應用程式的支柱,其也由 Spring IoC 容器管理的。bean 是一個被例項化、組裝、並通過 Spring IoC 容器所管理的物件。這些 bean 是由用容器提供的配置元資料建立的,例如,已經在先前章節看到的,在 XML 的表單中的 定
【Java Web】JSP總結
JSP 結構 網路伺服器需要一個JSP引擎,也就是一個容器來處理JSP頁面。容器負責截獲對JSP頁面的請求。本教程使用內嵌JSP容器的Apache來支援JSP開發。 JSP容器與Web伺服器協同合作,為JSP的正常執行提供必要的執行環境和其他服務,並且能夠正確識別專屬於JSP網頁的特
【Java Web】Spring入門
什麼是Spring Spring是一個開源的框架,它的誕生是為了簡化企業級系統開發。 目的:解決企業級開發的複雜性 使用JavaBean替換EJB,並且提供更多的企業級應用 所以簡單的來說,Spring是一個輕量級的控制反轉(IOC)和麵向切面(AOP)的容器
【java web】--Ajax非同步判斷使用者名稱是否存在
判斷使用者名稱是否存在,在很多專案中很常用。為了更好的使用者體驗度,把彈出框的形式升級成了Ajax的形式,這樣的好處是,非同步觸發,無需等待,非同步重新整理,節省伺服器資源消耗。 思路大概如下
【Java快取】:快取進化史
一. 應用服務快取優化 可以看見圖中分為幾個階段: 第一階段:資料同步加redis 通過訊息佇列進行資料同步至redis,然後Java應用直接去取快取 這個階段優點是:由於是使用的分散式快取,所以資料更新快。缺點也比較明顯:依賴Redis的穩定性,一旦redis掛了,整個快
【精華分享】:轉行資料分析的一份學習清單
作者:xiaoyu 微信公眾號:Python資料科學 知乎:Python資料分析 有很多朋友問我學習了Python後,有沒有什麼好的專案可以練手。 上一篇主要分享了博主親身轉行資料分析的經歷:【轉行資料分析的親身經歷】 本篇繼上一篇將分享轉行資料分析的一些經驗和學習方法,看
【Java.Web】Servlet —— Servlet的類的體系結構
Servlet API 以TOMCAT為例,<CATALINA_HOME>/lib/servlet-api.jar檔案為Servlet API的類庫檔案。 Servlet API主要由兩個Java包組成: javax.servlet和javax.servlet.
【Java.Web】Servlet —— Servlet容器的啟動及Servlet建立及初始化,容器預設的Servlet
Servlet容器 —— 以tomcat為例 在tomcat容器等級中,context容器直接管理servlet在容器中的包裝類Wrapper,所以Context容器如何執行將直接影響servlet的工作方式。 tomcat容器模型如下: 一個context對應一個web