在進(jìn)行 Android 開發(fā)時(shí),我們常常需要從服務(wù)器接收來(lái)自 web API 的數(shù)據(jù)。一般情況下我們獲取到的數(shù)據(jù)都是 Json 的數(shù)據(jù)格式。而在 Android 開發(fā)中,我們通常使用 Gson 讓我們更容易的解析 Json 數(shù)據(jù),并將解析之后的數(shù)據(jù)映射到自定義 Java 對(duì)象上來(lái)使用。
{ "id": 1, "name": "Apple", "price": 1.0, "description": { "short": "A fruit", "long": "An apple is a sweet, edible fruit produced by an apple tree." }, "comments": [ { "author": "Bob", "content": "I love Apples" }, { "author": "Jane", "content": "Apple pie is my favorite dessert" } ] }
對(duì)于以上樣例數(shù)據(jù),我們可以將其轉(zhuǎn)換為一個(gè) Java 對(duì)象,并對(duì)其進(jìn)行操作。
public class Fruit { @SerializedName("id") private int id; @SerializedName("name") private String name; @SerializedName("price") private float price; @SerializedName("description") private Description description; @SerializedName("comments") private Listcomments; // getters and setters } public class Description { @SerializedName("short") private String shortDescription; @SerializedName("long") private String longDescription; // getters and setters } public class Comment { @SerializedName("author") private String author; @SerializedName("content") private String content; // getters and setters }
在以上代碼中, @SerializedName 注解用來(lái)說(shuō)明 Json 數(shù)據(jù)中與 Java 對(duì)象中屬性的映射關(guān)系。如果 Json 數(shù)據(jù)的屬性名和 Java 對(duì)象的屬性名一致,則可以省略該注解。
解析 Json 數(shù)據(jù)并將其映射為 Java 對(duì)象的過程可以通過以下代碼實(shí)現(xiàn):
String jsonString = "sample json data"; Gson gson = new Gson(); Fruit fruit = gson.fromJson(jsonString, Fruit.class);
注意,當(dāng)我們解析 Json 數(shù)據(jù)時(shí),我們需要在代碼中指定要映射到的 Java 類型。在解析json字符串時(shí),我們也可以通過 GsonBuilder 來(lái)進(jìn)行配置。
通過 Gson 解析 Json 可以大大簡(jiǎn)化我們?cè)?Android 應(yīng)用程序中使用 web API 數(shù)據(jù)的過程,同時(shí)使代碼更簡(jiǎn)潔、更清晰。