JSON代表JavaScript對(duì)象符號(hào)。它是一個(gè)獨(dú)立的數(shù)據(jù)交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,并從中提取所需的信息。
Android提供了四個(gè)不同的類來處理JSON數(shù)據(jù)。這些類分別是:JSONArray, JSONObject, JSONStringer 和 JSONTokenizer.
第一步是確定感興趣的JSON數(shù)據(jù)的字段,例如。在JSON給我們下面感興趣的數(shù)據(jù):溫度
{ "sys": { "country":"GB", "sunrise":1381107633, "sunset":1381149604 }, "weather":[ { "id":711, "main":"Smoke", "description":"smoke", "icon":"50n" } ], "main": { "temp":304.15, "pressure":1009, } }
JSON文件包含許多組件。這里是表定義一個(gè)JSON文件及其說明的組件:
Sr.No | 組件及說明 |
---|---|
1 |
Array([) 在一個(gè)JSON文件中,方括號(hào)([])表示JSON數(shù)組 |
2 |
Objects({) 在一個(gè)JSON文件中,花括號(hào)({)表示JSON對(duì)象 |
3 |
Key JSON對(duì)象中包含一個(gè)鍵,這是一個(gè)字符串。鍵/值對(duì)組成一個(gè)JSON對(duì)象 |
4 |
Value 每個(gè)鍵的值,可能是字符串,整數(shù)或double等 |
解析一個(gè)JSON對(duì)象,我們將創(chuàng)建一流的 JSONObject 對(duì)象,并指定包含JSON數(shù)據(jù)給它一個(gè)字符串。其語法是:
String in; JSONObject reader = new JSONObject(in);
最后一步是解析JSON。一個(gè)JSON文件由不同的對(duì)象有不同的鍵/值對(duì)等,這樣JSONObject有一個(gè)單獨(dú)的函數(shù)用于解析每個(gè)JSON文件的組成。它的語法如下:
JSONObject sys = reader.getJSONObject("sys"); country = sys.getString("country"); JSONObject main = reader.getJSONObject("main"); temperature = main.getString("temp");
getJSONObject返回JSON對(duì)象的方法。形式返回指定鍵的字符串值的方法。
除了這些方法,還有更好的解析的JSON文件所提供的此類其他方法。這些方法如下:
Sr.No | 方法及說明 |
---|---|
1 |
get(String name) 此方法只返回值,但在對(duì)象類型的形式 |
2 |
getBoolean(String name) 該方法返回鍵指定的布爾值 |
3 |
getDouble(String name) 該方法返回鍵指定的double值 |
4 |
getInt(String name) 該方法返回鍵指定的整數(shù)值 |
5 |
getLong(String name) 該方法返回鍵指定的long值 |
6 |
length() 這個(gè)方法返回這個(gè)對(duì)象的名稱/值映射關(guān)系的數(shù)量.. |
7 |
names() 這個(gè)方法返回一個(gè)包含此對(duì)象的字符串名稱的數(shù)組。 |
這里有一個(gè)例子演示如何使用的JSONObject類。它創(chuàng)建了一個(gè)基本的天氣應(yīng)用程序,允許用戶從谷歌API的天氣JSON解析并顯示結(jié)果。
為了試驗(yàn)這個(gè)例子,可以在實(shí)際設(shè)備或模擬器運(yùn)行此。
Steps | 描述 |
---|---|
1 | 使用Android Studio創(chuàng)建Android應(yīng)用程序,并將其命名為JSONParser。在創(chuàng)建這個(gè)項(xiàng)目,確保目標(biāo)SDK編譯在Android SDK的最新版本并使用更高級(jí)別的API。 |
2 | 修改src/MainActivity.java 文件添加必要的代碼 |
3 | 修改 res/layout/activity_main添加相應(yīng)的XML組件 |
4 | 修改 res/values/string.xml 添加必要的字符串 |
5 | 創(chuàng)建一個(gè)新的Java文件在src/ HandleJSON.java,以獲取并解析XML數(shù)據(jù) |
6 | 修改 AndroidManifest.xml 添加必要的上網(wǎng)權(quán)限 |
7 | 運(yùn)行應(yīng)用程序并選擇運(yùn)行Android的設(shè)備,并在其上安裝的應(yīng)用和驗(yàn)證結(jié)果 |
以下是修改后的主活動(dòng)文件 src/com.yiibai.jsonparser/MainActivity.java. 的內(nèi)容
package com.example.jsonparser; import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.widget.EditText; public class MainActivity extends Activity { private String url1 = "http://api.openweathermap.org/data/2.5/weather?q="; private EditText location,country,temperature,humidity,pressure; private HandleJSON obj; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); location = (EditText)findViewById(R.id.editText1); country = (EditText)findViewById(R.id.editText2); temperature = (EditText)findViewById(R.id.editText3);