在移動(dòng)應(yīng)用和Web應(yīng)用中,JSON數(shù)據(jù)經(jīng)常用于數(shù)據(jù)傳輸。因此,解析JSON數(shù)據(jù)是很常見的需求。Gson是Google提供的一個(gè)JSON和Java對(duì)象的序列化/反序列化庫(kù)。最近,在項(xiàng)目中,我遇到了動(dòng)態(tài)解析JSON數(shù)組的需求,下面是我的解決方案。
首先,我們先來看看一個(gè)簡(jiǎn)單的JSON數(shù)組:
[ { "name": "Alice", "age": 20 }, { "name": "Bob", "age": 25 } ]
如果是一個(gè)固定的JSON數(shù)組,我們可以定義一個(gè)Java類來表示它:
class Person { String name; int age; }
然后,使用Gson將JSON數(shù)據(jù)解析為Person對(duì)象的列表:
String json = "[{\"name\":\"Alice\",\"age\":20},{\"name\":\"Bob\",\"age\":25}]"; List<Person> list = new Gson().fromJson(json, new TypeToken<List<Person>>(){}.getType());
但是,對(duì)于動(dòng)態(tài)的JSON數(shù)組,我們無法預(yù)知其結(jié)構(gòu),這時(shí)候,我們可以使用Gson的JsonElement類和JsonObject類來動(dòng)態(tài)地解析JSON數(shù)組。
假設(shè)我們需要解析下面這個(gè)動(dòng)態(tài)的JSON數(shù)組:
[ { "name": "Alice", "age": 20, "gender": "female" }, { "name": "Bob", "age": 25, "score": 90 } ]
我們可以使用以下代碼來解析它:
String json = "[{\"name\":\"Alice\",\"age\":20,\"gender\":\"female\"},{\"name\":\"Bob\",\"age\":25,\"score\":90}]"; JsonElement jsonElement = new JsonParser().parse(json); if (jsonElement.isJsonArray()) { JsonArray jsonArray = jsonElement.getAsJsonArray(); for (JsonElement element : jsonArray) { JsonObject jsonObject = element.getAsJsonObject(); for (String key : jsonObject.keySet()) { JsonElement value = jsonObject.get(key); System.out.println(key + " : " + value); } } }
代碼的執(zhí)行結(jié)果為:
name : "Alice" age : 20 gender : "female" name : "Bob" age : 25 score : 90
我們可以看到,通過動(dòng)態(tài)解析JSON數(shù)組,我們可以將JSON數(shù)據(jù)轉(zhuǎn)化為各種Java對(duì)象,實(shí)現(xiàn)數(shù)據(jù)的高效處理。