json詳細解析可見 http://redarmychen.iteye.com/blog/980243
json是javascript object notation的縮寫,可見json來源于javascript。json資料是一系列鍵值對的集合。
下面的代碼就是一個json:
{
"phone" : ["12345678", "87654321"], // 數組
"name" : "tianjiefeng", // 字元串
"age" : 100, // 數值
"address" : { "country" : "china", "province" : "jiangsu" }, // json對象
"married" : false // 布爾值
}
json是以key/value的形式存在的,key是strng類型的,value的類型可以是一個數組,可以是一個字元串,可以是一個數值,也可以是一個布爾值,甚至可以是一個json對象
我們對json有一定了解之後,接下來,讓我們來了解android中對json的解析
同樣我們和之前項目類似。采用開源架構來編寫程式。
1.引入jar檔案
2.添加網絡權限
3.建立用戶端對象
4.處理get請求,在get請求中new出jsonhttpresponsehandler對象
5.傳回jsonobject對象或者jsonoarray對象(jsonoarray對象周遊json數組)
6.jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值
2.添加通路網絡權限
<uses-permission android:name="android.permission.internet"/>
3.activity主要代碼:代碼中有詳細注釋,請認真觀看
package com.example.android_json;
import org.apache.http.header;
import org.json.jsonarray;
import org.json.jsonexception;
import org.json.jsonobject;
import com.loopj.android.http.asynchttpclient;
import com.loopj.android.http.jsonhttpresponsehandler;
import android.os.bundle;
import android.app.activity;
import android.view.menu;
import android.widget.toast;
public class mainactivity extends activity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
// http://172.16.237.200:8080/video/jsonservlet
initdata();
}
private void initdata() {
// 建立用戶端對象
asynchttpclient client = new asynchttpclient();
string url = "http://172.16.237.200:8080/video/jsonservlet";
toast.maketext(this, "發送請求到伺服器", 0).show();
client.get(url, new jsonhttpresponsehandler() {
//傳回jsonobject對象|jsonoarray對象
@override
public void onsuccess(int statuscode, header[] headers,
jsonarray response) {
// todo auto-generated method stub
super.onsuccess(statuscode, headers, response);
if (statuscode == 200) {
//周遊json數組
for (int i = 0; i < response.length(); i++) {
try {
// 擷取具體的一個jsonobject對象
jsonobject obj = response.getjsonobject(i);
//jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值
system.out.println("序号" + obj.getstring("id")
+ "--------姓名:" + obj.getstring("name")
+ "--------密碼:" + obj.getstring("pass")
+ "--------其他:" + obj.getstring("pass"));
} catch (jsonexception e) {
// todo auto-generated catch block
e.printstacktrace();
}
}
}
}
});
}
在控制台輸出結果:
例如:
//周遊json數組
for (int i = 0; i < response.length(); i++) {
try {
// 擷取具體的一個jsonobject對象
jsonobject obj = response.getjsonobject(i);
//jsonobject對象get(“屬性名”),getstring(“屬性名”),getint(“屬性名”)等方法來擷取指定屬性名的值
system.out.println("序号" + obj.getstring("id")
+ "--------姓名:" + obj.getstring("name")
+ "--------性别:" + obj.getstring("sex")
+ "--------密碼:" + obj.getstring("pass"));
} catch (jsonexception e) {
// todo auto-generated catch block
e.printstacktrace();
運作效果如下
解析:json檔案中沒有sex字段,若我 們在程式中寫入則會報如上錯誤,所有在編寫程式的時候應多加注意字段的對應。
開源架構資源:http://download.csdn.net/detail/zhaoyazhi2129/7400787
源碼:http://download.csdn.net/detail/zhaoyazhi2129/7400807