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(“属性名”)等方法来获取指定属性名的值
1.引入jar文件
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
原文地址http://blog.csdn.net/zhaoyazhi2129/article/details/27053747