这两天在翻新项目,之前写项目的时候,每次请求服务器返回数据时都要定义对象,代码显的很臃肿,于是查了相关资料,这次使用谷歌的json自带的几个类没有定义对象实现对服务器返回数据进行了解析。
先说三种常见的json数据类型。
数据类型01:
[ { "id": 1, "name": "小猪" }, { "id": 2, "name": "小猫" } ]数据类型02:
{ "arrayData": [ { "id": 1, "name": "小猪" }, { "id": 2, "name": "小猫" } ], "success": true, "total": 2 }
数据类型03:
{ "age": 23, "content": { "questions": [ { "answer": "小猪", "question": "what's your name?" }, { "answer": "23", "question": "what's your age" } ], "questionsTotal": 2 }, "name": "小猪" }
public class MainActivity extends Activity { String jsonString01 = "[{\"id\":1,\"name\":\"小猪\"},{\"id\":2,\"name\":\"小猫\"}]"; String jsonString02 = "{\"total\":2,\"success\":true,\"arrayData\":[{\"id\":1,\"name\":\"小猪\"},{\"id\":2,\"name\":\"小猫\"}]}"; String jsonString03 = "{\"name\":\"小猪\", \"age\":23,\"content\":{\"questionsTotal\":2,\"questions\": [ { \"question\": \"what's your name?\", \"answer\": \"小猪\"},{\"question\": \"what's your age\", \"answer\": \"23\"}]}}"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JsonfromTest01(); JsonfromTest02(); JsonfromTest03(); } /**** * 不定义bean对象 * 使用json解析第一种数据类型 */ private void JsonfromTest01() { try { JSONArray jsonArray = new JSONArray(jsonString01); //数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成Array for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成 int id = item.getInt("id"); // 获取对象对应的值 String name = item.getString("name"); Log.i("JsonfromTest01解析结果", "id = " + id + "; name = " + name); //打印结果 } } catch (JSONException e) { e.printStackTrace(); } } /**** * 不定义bean对象 * 使用json解析第二种数据类型 */ public void JsonfromTest02(){ try { int total; Boolean success; JSONObject jsonObject=new JSONObject(jsonString02); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object total = jsonObject.getInt("total"); success = jsonObject.getBoolean("success"); Log.i("JsonfromTest02解析结果", "total = " + total + "; success = " + success); //测试数据 JSONArray jsonArray = jsonObject.getJSONArray("arrayData");//里面有一个数组数据,可以用getJSONArray获取数组 for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成 int id = item.getInt("id"); // 获取对象对应的值 String name = item.getString("name"); Log.i("JsonfromTest02解析结果", "id = " + id + "; name = " + name); //打印结果 } } catch (JSONException e) { e.printStackTrace(); } } /**** * 不定义bean对象 * 使用json解析第三种数据类型 */ public void JsonfromTest03(){ try { JSONObject jsonObject = new JSONObject(jsonString03); //返回的数据形式是一个Object类型,所以可以直接转换成一个Object String name=jsonObject.getString("name"); int age=jsonObject.getInt("age"); Log.i("JsonfromTest03解析结果", "name = " + name + "; age = " + age); //测试数据 JSONObject contentObject=jsonObject.getJSONObject("content"); //获取对象中的对象 String questionsTotal=contentObject.getString("questionsTotal"); //获取对象中的一个值 Log.i("JsonfromTest03解析结果", "questionsTotal = " + questionsTotal); //测试数据 JSONArray jsonArray = contentObject.getJSONArray("questions");//里面有一个数组数据,可以用getJSONArray获取数组 for (int i = 0; i < jsonArray.length(); i++) { JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成 String answer = item.getString("answer"); // 获取对象对应的值 String question = item.getString("question"); Log.i("JsonfromTest03解析结果", "answer = " + answer + "; question = " + question); //打印结果 } } catch (JSONException e) { e.printStackTrace(); } } }
http://download.csdn.net/detail/abc6368765/9461908