在Android的網絡編程中,JSON是比XML使用更爲廣泛的數據傳輸機制。在許多的http網絡請求或接口調用中,返回的很多都是JSON。所以學會解析JSON是學會Android的基本技能。
簡單介紹下JSON,JSON是輕量級的文本數據交換格式,獨立於語言和平臺。比XML更小,更快,更易解析。JSON是用鍵值對來保存數據的。JSON保存的值可以是數字、字符串、布爾值、數組和對象。
廢話少說,直接上代碼。下面對以下JOSN進行解析:
-
{
-
-
"language":[
-
-
{
-
"id":1,
-
"name":"Java",
-
"ide":"Eclipse"
-
},
-
-
{
-
"id":2,
-
"name":"C++",
-
"ide":"Visual Studio"
-
}
-
-
]
-
-
}
在該實驗中,是把該JSON保存爲language.json文件並放置在assets文件夾下。在實際的項目開發中,JSON一般是http請求後由服務器返回的。具體實現代碼如下:
-
try {
-
InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("languages.json"), "UTF-8");
-
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
-
String line;
-
StringBuilder stringBuilder = new StringBuilder();
-
while ((line = bufferedReader.readLine()) != null) {
-
stringBuilder.append(line);
-
}
-
bufferedReader.close();
-
inputStreamReader.close();
-
-
-
JSONObject language = new JSONObject(stringBuilder.toString());
-
JSONArray array = language.getJSONArray("language");
-
for (int i = 0; i < array.length(); i++) {
-
JSONObject item = array.getJSONObject(i);
-
text.append(item.getInt("id") + " " + item.getString("name") + " " + item.getString("ide"));
-
text.append("\n");
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
} catch (JSONException e) {
-
e.printStackTrace();
-
}
程序運行後,截圖如下:
至此,已經成功完成對JSON字符串的解析。個人對XML解析和JSON解析的理解就像是剝洋蔥,是一層一層往裏面進行解析,只要搞清楚邏輯關係,就不會有問題。JSON有時候會碰到3層,4層的循環嵌套,會比較麻煩,只要按照步驟進行,就不會出錯。
github主頁:https://github.com/chenyufeng1991 。歡迎大家訪問!