Gson是一個(gè)輕便的Java庫,用于將JSON表達(dá)式轉(zhuǎn)換為Java對(duì)象或?qū)ava對(duì)象轉(zhuǎn)換為JSON表達(dá)式。它支持三種不同類型的JSON解析格式:
第一種JSON格式是簡單的JSON格式,這種格式在JavaScript和AJAX中常用。它使用JSON對(duì)象或JSON數(shù)組表示JSON數(shù)據(jù)。下面是一個(gè)示例:
{ "name": "Lucy", "age": 23, "address": { "province": "Shandong", "city": "Qingdao" }, "hobby": ["reading", "running"] }
可以使用Gson庫來解析上述格式的JSON。首先,需要定義一個(gè)Java類來存儲(chǔ)JSON數(shù)據(jù):
class Person { String name; int age; Address address; Listhobby; class Address { String province; String city; } }
然后,使用Gson庫將JSON數(shù)據(jù)轉(zhuǎn)換為Java對(duì)象:
String json = "{...}"; // 上述JSON數(shù)據(jù) Gson gson = new Gson(); Person person = gson.fromJson(json, Person.class);
第二種JSON格式是Gson專有的JSON格式,它支持將JSON數(shù)據(jù)轉(zhuǎn)換為Java Map或Java List。這種格式是通過Gson的fromJson方法將JSON數(shù)據(jù)解析為一個(gè)JsonElement對(duì)象,然后通過該對(duì)象的getAsJsonObject、getAsJsonArray和getAsJsonPrimitive方法將其轉(zhuǎn)換為Java對(duì)象。下面是一個(gè)示例:
String json = "{...}"; // 上述JSON數(shù)據(jù) Gson gson = new Gson(); JsonElement element = gson.fromJson(json, JsonElement.class); String name = element.getAsJsonObject().get("name").getAsString(); int age = element.getAsJsonObject().get("age").getAsInt(); JsonElement addressElement = element.getAsJsonObject().get("address"); String province = addressElement.getAsJsonObject().get("province").getAsString(); String city = addressElement.getAsJsonObject().get("city").getAsString(); JsonArray hobbyArray = element.getAsJsonObject().get("hobby").getAsJsonArray(); ListhobbyList = new ArrayList<>(); for (JsonElement hobbyElement : hobbyArray) { hobbyList.add(hobbyElement.getAsString()); }
第三種JSON格式是使用TypeToken來解析復(fù)雜的JSON格式,例如嵌套類和泛型類。在這種情況下,需要提供一個(gè)TypeToken對(duì)象來解析JSON數(shù)據(jù)。下面是一個(gè)示例:
String json = "{...}"; // 上述JSON數(shù)據(jù) Gson gson = new Gson(); Type personType = new TypeToken<Person<Friend>>() {}.getType(); Person<Friend> person = gson.fromJson(json, personType); class Friend { String name; int age; } class Person<T> { String name; int age; T friend; }
使用TypeToken對(duì)象可以解析類似于上述Person<Friend>這樣的復(fù)雜JSON格式,其中類型參數(shù)可以是任何Java類。