Android JSON資料格式的解析,與簡單物件、帶泛型的List和Map的轉換,以及GSON的使用
阿新 • • 發佈:2019-01-25
首先,這裡要先說一下 JSON 的語法。
1、使用 JSON 語法建立物件
如圖,建立 object 時,總是以 “{” 開始,以 “}” 結束,物件的每個屬性和屬性值之間以英文冒號 “:” 隔開,多個屬性定義之間以英
文逗號 “,” 隔開。語法格式如下:
object =
{
name1 : value1,
name2 : value2,
...
}
使用 JSON 語法建立 JavaScript 物件是,屬性值不僅可以是普通字串,也可以是任何基本資料型別,還可以是函式、陣列,
甚至是另外一個 JSON語法建立的物件。例如:
person = { name : 'liuwan', age : 24, // 使用 JSON 語法為其指定一個屬性 son : { blog : 'csdn', git : 'github' }, // 使用 JSON 語法為其直接分配一個方法 info : function() { document.writeln("姓名:" + this.name); } }
2、使用 JSON 語法建立數組
如圖,JSON 建立陣列總是以英文方括號 “[” 開始,然後依次放入陣列元素,元素與元素之間以英文逗號 “,” 隔開,最後以英文反
方括號 “]” 結束。使用 JSON建立陣列的語法格式如下:
arr = [value1 , value2 ...]
3、Android 對 Json 的支援
幸運的是,Android 系統內建了對 JSON 的支援,在 Android SDK 的 org.json 包下提供了JSONObject、JSONArray 等類,通過
這些類可以很方便的完成 JSON 字串與 JSONObject、JSONArray 之間的互相轉換。
JSONObject :代表一個 JSON 物件,它可完成 Java 物件與 JSON 字串之間的相互轉換。
JSONArray :代表一個 JSON 陣列,它可完成 Java 集合與 JSON字串之間的相互轉換。
下面是一個Android內建 JSON 解析的 Demo:
public class JsonTools { public JsonTools() { } public static Person getPerson(String key, String jsonString) { Person person = new Person(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONObject personObject = jsonObject.getJSONObject("person"); person.setId(personObject.getInt("id")); person.setName(personObject.getString("name")); } catch (Exception e) { e.printStackTrace(); } return person; } public static List<Person> getPersons(String key, String jsonString) { List<Person> list = new ArrayList<Person>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject2 = jsonArray.getJSONObject(i); Person person = new Person(); person.setId(jsonObject2.getInt("id")); person.setName(jsonObject2.getString("name")); list.add(person); } } catch (Exception e) { } return list; } public static List<String> getList(String key, String jsonString) { List<String> list = new ArrayList<String>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { String msg = jsonArray.getString(i); list.add(msg); } } catch (Exception e) { e.printStackTrace(); } return list; } public static List<Map<String, Object>> listKeyMaps(String key, String jsonString) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); try { JSONObject jsonObject = new JSONObject(jsonString); JSONArray jsonArray = jsonObject.getJSONArray(key); for (int i = 0; i < jsonArray.length(); i++) { JSONObject jsonObject2 = jsonArray.getJSONObject(i); Map<String, Object> map = new HashMap<String, Object>(); Iterator<String> iterator = jsonObject2.keys(); while (iterator.hasNext()) { String json_key = iterator.next(); Object json_value = jsonObject2.get(json_key); if (json_value == null) { json_value = ""; } map.put(json_key, json_value); } list.add(map); } } catch (Exception e) { e.printStackTrace(); } return list; } }
4、GSON
GSON 是一個 Java 類庫,可以把 Java 物件轉換成 JSON 資料,也可以把 JSON 字串轉換成 Java 物件,支援任意複雜的
Java 物件,包括沒有原始碼的對象。
下面是一個利用 GSON 解析 JSON 的 Demo:
public class GsonTools {
public GsonTools() {
}
public static <T> T getPerson(String jsonString, Class<T> cls) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(jsonString, cls);
} catch (Exception e) {
e.printStackTrace();
}
return t;
}
public static <T> List<T> getPersons(String jsonString, Class<T> cls) {
List<T> list = new ArrayList<T>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<T>>() {
}.getType());
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static List<String> getList(String jsonString) {
List<String> list = new ArrayList<String>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<String>>() {
}.getType());
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
public static List<Map<String, Object>> listKeyMaps(String jsonString) {
List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
try {
Gson gson = new Gson();
list = gson.fromJson(jsonString, new TypeToken<List<Map<String, Object>>>() {
}.getType());
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
}
最後附上 GSON 的下載地址:https://github.com/google/gson