1. 程式人生 > >【Java Web】: GSON 資料格式詳解

【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

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;
    }   
}
GsonTest.java 講person物件轉換為JSON資料,此時person物件有四個屬性。
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);
    }

}
程式執行結果如下:打印出來的是一個完全符合JSON格式的字串。所以使用GSON是特別方便的。

{"username":"AHuier","password":"123456","age":30,"address":"XIAMEN"}

3) 在上述程式的基礎上我們在Person類裡面新增一個list,然後往list中新增三條資料,實驗一下GSON處理person物件轉換成JSON資料格式是什麼樣的。

1. Person.java現在對於person物件來說有三個普通的屬性,還有一個集合的屬性,集合裡面有三個字串.

package 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;
    }   
}
2. GsonTest.java
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);
    }

}
程式執行結果如下,很顯然它將List轉換為陣列的形式了,下面就是將person物件轉換成JSON的資料格式了。

{"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 webspringMVC框架實現用多選框批量刪除表資料功能

本功能是基於springMVC+mybatis框架實現的,實現過程如下: jsp程式碼: <c:forEach items="${requestScope.movies}" var="movie" varStatus="status"> <

java webServlet生命周期

控制臺顯示 encoding port protect err 我們 sys 技術 vax 在Java web中 Servlet 是根基。雖然工作中幾乎沒人再去寫Servlet了,框架為我們完成了這些工作。我們只要專註於業務邏輯的實現。但是理解Servlet還是很有必要的。

java WebTomcat的安裝與配置

一、JavaWeb的應用的概念 在Sun的Java Servlet規範中,對Java Web應用作了這樣的定義:“Java Web應用是由一組Servlet、HTML頁、類、以及其他可以被繫結的資源構成。它可以在各種供應商提供的實現Servlet規範的Servlet容器中執

Java WebSpring IOC機制

POJO POJO的全稱有兩個:plain old java object 、plain ordinary java object。我們可以把POJO類看做是簡單的JavaBean類(具有一系列Getter、Setter的方法)。 IOC IOC的全稱是:Inv

Java WebError 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 webJSP中form表單中文亂碼的解決嘗試

       在人生中的第一個實際專案中,我遇到了一個很困擾的問題,就是在內管系統中,我做了一個測試頁面,用來測試向對方介面傳遞引數,我使用了jsp的form表單向後端傳遞引數,在本地啟動服務,進行測試都沒有問題,沒有出現中文亂碼的情況,但是提交到測試環境進行驗證時,卻出現了

Java WebSpring Annotation

1、@Required @Required 註釋應用於 bean 屬性的 setter 方法,標有該註釋的setter方法必須出現在Spring xml檔案中初始化,否則容器就會丟擲一個 BeanInitializationException 異常。 2、@Autowired @

Java WebSpring中Bean的使用

Bean的定義 被稱作 bean 的物件是構成應用程式的支柱,其也由 Spring IoC 容器管理的。bean 是一個被例項化、組裝、並通過 Spring IoC 容器所管理的物件。這些 bean 是由用容器提供的配置元資料建立的,例如,已經在先前章節看到的,在 XML 的表單中的 定

Java WebJSP總結

JSP 結構 網路伺服器需要一個JSP引擎,也就是一個容器來處理JSP頁面。容器負責截獲對JSP頁面的請求。本教程使用內嵌JSP容器的Apache來支援JSP開發。 JSP容器與Web伺服器協同合作,為JSP的正常執行提供必要的執行環境和其他服務,並且能夠正確識別專屬於JSP網頁的特

Java WebSpring入門

什麼是Spring Spring是一個開源的框架,它的誕生是為了簡化企業級系統開發。 目的:解決企業級開發的複雜性 使用JavaBean替換EJB,並且提供更多的企業級應用 所以簡單的來說,Spring是一個輕量級的控制反轉(IOC)和麵向切面(AOP)的容器

java web--Ajax非同步判斷使用者名稱是否存在

  判斷使用者名稱是否存在,在很多專案中很常用。為了更好的使用者體驗度,把彈出框的形式升級成了Ajax的形式,這樣的好處是,非同步觸發,無需等待,非同步重新整理,節省伺服器資源消耗。   思路大概如下

Java快取快取進化史

一. 應用服務快取優化 可以看見圖中分為幾個階段: 第一階段:資料同步加redis 通過訊息佇列進行資料同步至redis,然後Java應用直接去取快取 這個階段優點是:由於是使用的分散式快取,所以資料更新快。缺點也比較明顯:依賴Redis的穩定性,一旦redis掛了,整個快

精華分享轉行資料分析的一份學習清單

作者:xiaoyu 微信公眾號:Python資料科學 知乎:Python資料分析 有很多朋友問我學習了Python後,有沒有什麼好的專案可以練手。 上一篇主要分享了博主親身轉行資料分析的經歷:【轉行資料分析的親身經歷】 本篇繼上一篇將分享轉行資料分析的一些經驗和學習方法,看

Java.WebServlet —— Servlet的類的體系結構

Servlet API 以TOMCAT為例,<CATALINA_HOME>/lib/servlet-api.jar檔案為Servlet API的類庫檔案。 Servlet API主要由兩個Java包組成: javax.servlet和javax.servlet.

Java.WebServlet —— Servlet容器的啟動及Servlet建立及初始化,容器預設的Servlet

Servlet容器 —— 以tomcat為例 在tomcat容器等級中,context容器直接管理servlet在容器中的包裝類Wrapper,所以Context容器如何執行將直接影響servlet的工作方式。 tomcat容器模型如下: 一個context對應一個web