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