鍍金池/ 教程/ Android/ Android JSON解析器
Android 應(yīng)用組件
使用布局文件自定義Android組件
Android通知
Android主題示例
Android JetPlayer實(shí)例
Android MediaPlayer(多媒體播放)
Android AbsoluteLayout
Android FrameLayout
Android Gestures/手勢(shì)
Android AutoCompleteTextView(自動(dòng)完成)實(shí)例
Android 資源組織和訪問
Android ListView
Android GridView
Android數(shù)據(jù)備份
Android撥打電話
Android發(fā)送短信/SMS
Android ProgressDialog
SimpleCursorAdapter
Android發(fā)送電子郵件
Android Activity
Android TextView
Android事件處理
Android TableLayout
Android加載Spinner
Android內(nèi)容提供者
Android自定義字體
Android Service
Android CheckBox
Android Intent過濾器
Android LinearLayout
Android登錄實(shí)例
Android RadioButton
Android樣式和主題
Android自定義組件及屬性
Android UI控件
Android Animation(動(dòng)畫)實(shí)例
Android Camera(攝像頭)
Android ToggleButton
Android Clipboard(復(fù)制/剪貼板)
Android音頻捕獲(錄音)
發(fā)布Android應(yīng)用
Android Alertdialog(警告對(duì)話框)
Android圖片效果
Android內(nèi)部存儲(chǔ)
Android基于位置服務(wù)
Android RadioGroup
Android AutoCompleteTextView
Android Bluetooth(藍(lán)牙)實(shí)例
Android RelativeLayout
Android最佳實(shí)踐
Android本地化
Android自定義組件
Android教程
Android 架構(gòu)
Android UI布局
Android Button
Android Hello World示例
Android音頻管理器實(shí)例
ArrayAdapter
Android拖放
Android碎片/片段
Android圖片切換
Android JSON解析器
Android開發(fā)環(huán)境搭建
Android Spinner
Android樣式示例
使用活動(dòng)代碼自定義Android組件
Android ImageButton
Android EditText
Android廣播接收器

Android JSON解析器

JSON代表JavaScript對(duì)象符號(hào)。它是一個(gè)獨(dú)立的數(shù)據(jù)交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,并從中提取所需的信息。

Android提供了四個(gè)不同的類來處理JSON數(shù)據(jù)。這些類分別是:JSONArrayJSONObject, 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 元素

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等

JSON - 解析

解析一個(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);