顯示具有 JSON 標籤的文章。 顯示所有文章
顯示具有 JSON 標籤的文章。 顯示所有文章

2012年11月1日 星期四

Android程式設計 - JSON資料處理(5)


處理網站回傳的JSON資料
對於網站回傳的JSON資料,其處理方式與處理JSON文件檔案作業大同小異,只是將原先由檔案串流讀取資料改為使用HTTP串流讀取資料。
假設http://mysite/testjson.php回傳的JSON資料,我們可以透過以下程式碼將回傳的JSON資料建立JSONObject
  URL jsonUrl = new URL("http://mysite/testjson.php");
  URLConnection c = jsonUrl.openConnection();
  c.setConnectTimeout(5000);        //設定連線逾期時間
  is = c.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(
            is, "big5"));
  Writer writer = new StringWriter();
  char[] buffer = new char[1024];
  int n;
  while ((n=reader.read(buffer)) != -1) writer.write(buffer, 0, n);
  is.close();
  String jsonstr = sb.toString();
  JSONObject json = new JSONObject(jsonstr);
同樣地,後續就可依據JSON文件結構一層一層解讀JSON資料。

2012年10月28日 星期日

Android程式設計 - JSON資料處理(4)

處理JSON文件
假設手機SD卡中存在test.json文件,內容如下:
{
   "name":"wu, ShyiShiou",
   "address":{
      "street":"no.568 jung-jeng rd.",
      "postcode":54243,
      "city":"Tasotun"
   },
   "phoneNumber":[
      {
         "type":"office",
         "number":"2563489"
      },
      {
         "type":"fax",
         "number":"2569834"
      }
   ]
}
首先要讀取test.json文件內容並儲存到字串變數。由於最外層為JSONObject結構,因此必須以所得到的JSON格式字串建立JSONObject物件。
  String sdcardDir = Environment.getExternalStorageDirectory().toString();
  String jsonfile = sdcardDir+ "/" + "test.json";
  FileInputStream fis = new FileInputStream(jsonfile);
  BufferedReader reader = new BufferedReader(new InputStreamReader(
            fis, "UTF-8"));
  Writer writer = new StringWriter();
  char[] buffer = new char[1024];
  int n;
  while ((n=reader.read(buffer)) != -1) writer.write(buffer, 0, n);
  fis.close();
  String jsonstr = writer.toString();
  JSONObject json = new JSONObject(jsonstr);
之後就可依據test.json文件結構一層一層解讀JSON資料。例如:
  String username = json.getString("name");
  JSONObject jo_address = json.getJSONObject("address");
  JSONArray ja_phone = json.getJSONArray("phoneNumber");
address的內容可再由jo_address進一步解讀,例如:
  String street = jo_address.getString("street");
phoneNumber內容則可再由ja_phone繼續解讀,例如:
  String office_tel = ja_phone.getJSONObject(0).getString("number");

2012年10月27日 星期六

Android程式設計 - JSON資料處理(3)

使用JSONArray
JSONArray類別透過位置索引值來取得該位置的名稱/」資料對之值,常用方法如下:
l String getString (int index)
取得指定索引位置之字串值。
index        名稱/」資料對之位置索引值,從0開始。
l boolean getBoolean (int index)
取得指定索引位置之布林值。
index        名稱/」資料對之位置索引值,從0開始。
l double getDouble (int index)
取得指定索引位置之倍精準數值。
index        名稱/」資料對之位置索引值,從0開始。
l int getInt (int index)
取得指定索引位置之整數值。
index        名稱/」資料對之位置索引值,從0開始。
l long getLong (int index)
取得指定索引位置之長整數值。
index        名稱/」資料對之位置索引值,從0開始。
l JSONArray getJSONArray (int index) 
取得指定索引位置之JSONArray值。
index        名稱/」資料對之位置索引值,從0開始。
l JSONObject get JSONObject (int index) 
取得指定索引位置之JSONObject值。
index        JSONObject名稱/」資料對之位置索引值,從0開始。

Android程式設計 - JSON資料處理(2)

使用JSONObject
JSONObject類別透過名稱/」資料對中的名稱字串來取得其對應值,常用方法如下:
l String getString (String name)
取得指定名稱的對應字串值。
name        字串類型名稱/」資料對中的名稱字串。
l boolean getBoolean (String name)
取得指定名稱的對應布林值。
name        布林類型名稱/」資料對中的名稱字串。
l double getDouble (String name)
取得指定名稱的對應倍精準數值。
name        倍精準數值類型名稱/」資料對中的名稱字串。
l int getInt (String name)
取得指定名稱的對應整數值。
ame         整數類型名稱/」資料對中的名稱字串。
l long getLong (String name)
取得指定名稱的對應長整數值。
name       長整數類型名稱/」資料對中的名稱字串。
l JSONArray getJSONArray (String name) 
取得指定名稱的對應JSONArray值。
name       JSONArray類型名稱/」資料對中的名稱字串。
l JSONObject get JSONObject (String name) 
取得指定名稱的對應JSONArray值。
name       JSONArray類型名稱/」資料對中的名稱字串。
l JSONArray names ()

取得內含的名稱/」資料對之所有name名稱。

Android程式設計 - JSON資料處理(1)

JSONJavaScript Object Notation支援4種基本資料:字串(string),數值(number),布林資料(boolean)及null
一份JSON文件可以是JSONObjectJSONArray結構,說明如下:
l JSONObject
JSONObject「名稱/值」資料對的集合(A collection of name/value pairs),使用{}包含一系列無序的名稱/」資料對,名稱/」資料對之間使用,(逗號)分隔。其中名稱為一個字串,而資料值(value)則可以是字串、數值、布林、 nullJSONObjectJSONArray結構。例如:
{
   "Apple":"iOS",
   "Google":"Android"
}

使用時只要使用JSON格式字串建立JSONObject物件即可,例如:
  String jsonobj = "{'Apple':'iOS','Google':'Android'}";
  JSONObject jObj = new JSONObject(jsonobj);
l JSONArray
JSONArray資料值的有序列表(An ordered list of values),使用[](左右中括弧)包含資料值資料值之間使用,(逗號)分隔。例如,以下JSONArray包含二組JSONObject結構值。
[
   {"Apple":"iOS"},
   {"Google":"Android"}
]

使用時只要使用JSON格式字串建立JSONArray物件即可。例如:
  String jsonary = "[{'Apple':'iOS'},{'Google':'Android'}]";
  JSONArray jArray = new JSONArray(jsonary);
由於JSONObjectJSONArray是可以相互嵌套,因此可以組合出各種JSON文件。在程式中只要由最外層開始,一層一層取出JSON文件內容即可。