您的位置:首页 > Web前端 > JavaScript

json解析简单数据<一>

2016-03-15 09:56 585 查看
这两天在翻新项目,之前写项目的时候,每次请求服务器返回数据时都要定义对象,代码显的很臃肿,于是查了相关资料,这次使用谷歌的json自带的几个类没有定义对象实现对服务器返回数据进行了解析。

本次解析使用到了android中和JSON解析相关的JSONObject和JSONArray类,另外还有JSONStringer和JSONTokener,JSONException这几个类和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": "小猪"
}


不定义新的对象,直接使用json中的JSONArray和JSONObject进行数据转换,废话不多说,直接上代码(代码读万行,敲码如有神^_^):

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();
}
}

}


看看代码,自己慢慢体会吧。另外附上代码原件:demo下载 http://download.csdn.net/detail/abc6368765/9461908
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: