目前解析json有三種工具:org.json(Java經常使用的解析),fastjson(阿里巴巴工程師開發的),Gson(Google官網出的),解析速度最快的是Gson,下載地址:https://code.google.com/p/google-gson/html
什麼是JSON:java
JSON即JavaScript Object Natation, 它是一種輕量級的數據交換格式, 與XML同樣, 是普遍被採用的客戶端和服務端交互的解決方案.android
JSON對象: json
JSON 中對象(Object)以"{"開始, 以"}"結束. 對象中的每個item都是一個key-value對, 表現爲"key:value"的形式, key-value對之間使用逗號分隔. 如:{"name":"coolxing", "age"=24, "male":true, "address":{"street":"huiLongGuan", "city":"beijing", "country":"china"}}. JSON對象的key只能是string類型的, 而value能夠是string, number, false, true, null, Object對象甚至是array數組, 也就是說能夠存在嵌套的狀況.數組
JSON數組: 工具
JSON 數組(array)以"["開始, 以"]"結束, 數組中的每個元素能夠是string, number, false, true, null, Object對象甚至是array數組, 數組間的元素使用逗號分隔. 如["coolxing", 24, {"street":"huiLongGuan", "city":"beijing", "country":"china"}].ui
Gson的基本使用方法:this
經過獲取JsonReader對象解析JSON數據:
google
String jsonData = "[{\"username\":\"arthinking\",\"userId\":001},{\"username\":\"Jason\",\"userId\":002}]"; try{ JsonReader reader = new JsonReader(new StringReader(jsonData)); reader.beginArray(); while(reader.hasNext()){ reader.beginObject(); while(reader.hasNext()){ String tagName = reader.nextName(); if(tagName.equals("username")){ System.out.println(reader.nextString()); } else if(tagName.equals("userId")){ System.out.println(reader.nextString()); } } reader.endObject(); } reader.endArray(); } catch(Exception e){ e.printStackTrace(); }
經過把JSON數據映射成一個對象,使用Gson對象的fromJson()方法獲取一個對象數組進行操做:spa
建立JSON數據對應的一個POJO對象User.java:
public class User { private String username ; private int userId ; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getUserId() { return userId; } public void setUserId(int userId) { this.userId = userId; } }
使用Gson對象獲取User對象數據進行相應的操做:
Type listType = new TypeToken<LinkedList<User>>(){}.getType(); Gson gson = new Gson(); LinkedList<User> users = gson.fromJson(jsonData, listType); for (Iterator iterator = users.iterator(); iterator.hasNext();) { User user = (User) iterator.next(); System.out.println(user.getUsername()); System.out.println(user.getUserId()); }
若是要處理的JSON字符串只包含一個JSON對象,則能夠直接使用fromJson獲取一個User對象:
String jsonData = "{\"username\":\"arthinking\",\"userId\":001}"; Gson gson = new Gson(); User user = gson.fromJson(jsonData, User.class); System.out.println(user.getUsername()); System.out.println(user.getUserId());
解析複雜實例:
數據格式:
實體類(裏面的成員變量和接口的返回值名稱一 一對應才能保證解析正確):
注意上面內部類的運用。
解析:
若出現引用異常,請查看Java內部類設計原則。
轉自:http://blog.csdn.net/rain_butterfly/article/details/38404293?utm_source=tuicool&utm_medium=referral
參考:http://www.itzhai.com/android-to-parse-json-data-using-gson.html