Gson——使用詳解(2)

轉自http://www.importnew.com/16630.html

使用JSON對象

比方說,我們需要使用JSON對象並加載他們爲Java對象。假設web服務器查詢時產生如下JSON對象:

{
  NAME:"Albert Attard",
  P_LANGUAGE:"Java",
  LOCATION:"Malta"
}
此JSON對象包含3個不同值的域。比如我們需要使用JSON對象並創建一個Java對象來展示它。爲了使這個例子更有趣,假設我們只關心name和location域

首先創建一個Java類來表示name和location。類命名爲Person。類的名字無關緊要,但域的名字必須一致。域名必須匹配(大小寫敏感)JSON對象中的名字。更進一步,類必須包含一個默認構造函數(即使它被設置爲private)。如下所示,name和location域在JSON中是大寫的。JSON中域P_LANGUAGE被忽略了,因爲Java對象中不包括該名稱的域

public class Person {
	 private String NAME;
	    private String LOCATION;
	    @Override
	    public String toString() {
	        return NAME + " - " + LOCATION;
	    }
}

準備好Java對象後,我們可以讀取JSON對象並加載爲Java對象,如下代碼所示。爲了模擬真實情況,我們使用了字節流作爲輸入。還要注意,JSON內容保存在resource文件夾的文件裏(這不是常規做法)。

public static void main(String[] args) throws IOException {
		Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("js/Server1.json"), "UTF-8");
			Gson gson = new GsonBuilder().create();
			Person p = gson.fromJson(reader, Person.class);
			System.out.println(p);
	}
輸出如下:

Albert Attard - Malta
Gson解析JSON對象並創建了一個Person類的實例,並打印到命令行中。

嵌套JSON對象

讓我們對上面的例子更進一步,以下所示JSON代碼段包含了一個嵌套對象。

{
  NAME:"Albert Attard",
  P_LANGUAGE:"Java",
  LOCATION:"Malta",
  EXAM: {
    SUBJECT:"Programming",
    GRADE:4.5
  }
}
EXAM域由兩個域組成,分別是SUBJECT和GRADE。我們需要修改Person類的定義來包含EXAM域,並創建一個新的Java類來表示EXAM,該類包含SUBJECT和GRADE域。


我們首先創建新的類來表示嵌套對象。就像之前討論那樣,類名無關緊要,但是域名必須與JSON中的域名匹配。

package com.javacreed.examples.gson.part3;
 
public class Exam {
    private String SUBJECT;
    private double GRADE;
 
    // Getters and setters are not required for this example.
    // GSON sets the fields directly using reflection.
 
    @Override
    public String toString() {
        return SUBJECT + " - " + GRADE;
    }
}
現在我們可以修改Person類,引入一個與JSON中EXAM同名的域,類型爲Exam

public class Person {
 
    private String NAME;
    private String LOCATION;
    private Exam EXAM;
 
    @Override
    public String toString() {
        return NAME + " - " + LOCATION + " (" + EXAM + ")";
    }
}
注意,所需的變化是最小的,因爲Gson動態發現(使用反射)類和它的域。

最後,讓我們嘗試新的變化。

public class JsonToJava {
	public static void main(String[] args) throws IOException {
		Reader reader = new InputStreamReader(JsonToJava.class.getResourceAsStream("js/Server2.json"), "UTF-8");
			Gson gson = new GsonBuilder().create();
			Person p = gson.fromJson(reader, Person.class);
			System.out.println(p);
	}
}
sonToJava類沒有做任何改變,因爲Gson使用了模型(Person和Exam類)將Json映射成Java。

結論

即使JSON可能是一個新概念,但它十分簡單與直接。此外,相比於需要增加標籤進行消息/數據轉換而不斷膨脹的笨重的XML,它因爲簡單更加流行。需要指出JSON是JavaScript的一個子集,JavaScript將它作爲一個完美的方案來進行數據交換,例如網頁。GSON API使它更便於使用,即使在這裏沒有討論的部分,它也提供了強大的靈活性。




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章