Android——JSON数据解析详解
2014-11-14 16:25
423 查看
今天我们来一起探讨一下有关android开发中遇到的数据解析问题;
首先,我们经常会遇到从服务端返回的json格式的数据,让我们在客户端进行解析并显示到客户端上;这样的场景下,json 解析就显得尤为重要;
一 JSON格式:
Json是一种轻量级的数据交换格式,在网络上我们通常用xml 或者json 来进行数据的传递和交换;
首先我们来看看它的结构:
1 json对象(key----value) ,JSONObject ,代表一个json对象,可以完成java对象和json字符串之间的转换;
for example: student{"name":"晓斌","age":"26","sex":"man"},不同元素之前用逗号隔开;
java对象和json字符串之间的转化:
Student stu=new Student([b]1005, "张三", "Wuhan", "zs.jpg");[/b]
JSONObject jsonObject=new JSONObject(stu);
jsonObject.toString();
JSONObject jsonObject = new JSONObject(str);
Iterator<String> iterator = jsonObject.keys();
Student stu = new Student();
while(iterator.hasNext()){
//可以利用java反射,写泛型方法
String key = iterator.next();
if(key.equals("sid")){
stu.setSid(jsonObject.getInt(key));
}
if(key.equals("name")){
stu.setName(jsonObject.getString(key));
}
if(key.equals("sid")){
stu.setAddr(jsonObject.getString(key));
}
if(key.equals("sid")){
stu.setPic(jsonObject.getString(key));
}
}
方式二:
Student stu = new Student(1005, "张三", "Wuhan", "zs.jpg");
JSONObject jsonObject = new JSONObject();
jsonObject.put("zs", stu);
同样jsonObject.toString()就是字符串输出 {"zs":"{sid:1005, name:张三, addr:Wuhan, pic:zs.jpg}"}。要 注意,如果Student没有覆写toString()方法,输入的是:{"zs":"org.itair.domain.Student@2666e815"}
2 json数组JSONArray;代表一个json数组,可以完成java集合与json字符串之前的转换;
{"students":[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},
{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}
方式一、
转换:
Student s1 = new Student(1001,"zhangsan","yichang","111");
Student s2 = new Student(1002,"Jack","Beijing","222");
List<Student> stus = new ArrayList<Student>();
stus.add(s1);
stus.add(s2);
JSONArray array = new JSONArray(stus);
array的字符串是:[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]
解析:
JSONArray jsonArray = new JSONArray("要解析的json字符串");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
//解析成特定的对象操作,new对象,从jsonObject2取出值来装进去
Iterator<String> iterator = jsonObject2.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = jsonObject2.get(key);
map.put(key, value);
}
}
方式二、
转换:
Student s1 = new Student(1001,"zhangsan","yichang","111");
Student s2 = new Student(1002,"Jack","Beijing","222");
List<Student> stus = new ArrayList<Student>();
stus.add(s1);
stus.add(s2);
JSONObject jsonObject = new JSONObject();
jsonObject.put("students", stus);
jsonObject的字符串:{"students":[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]}
解析:
由于上面的转换方式是把集合对象放到 JSONObject中。
JSONObject jsonObject = new JSONObject("要解析的json字符串");
JSONArray jsonArray = jsonObject.getJSONArray("key");//key就是上面放入的students
后面的代码同上循环。
在Android的项目中,一般不会把Json字符串解析成对象的集合,而多是解析成List<Map<String,Object>>
List<Map<String,Object>> list = new ArrayList<Map<String ,Object>>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
Map<String ,Object> map = new HashMap<String, Object>();
Iterator<String> iterator = jsonObject2.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = jsonObject2.get(key);
map.put(key, value);
}
list.add(map);
}
要解析成对象集合,还是用Gson, fastjson比较方便。
首先,我们经常会遇到从服务端返回的json格式的数据,让我们在客户端进行解析并显示到客户端上;这样的场景下,json 解析就显得尤为重要;
一 JSON格式:
Json是一种轻量级的数据交换格式,在网络上我们通常用xml 或者json 来进行数据的传递和交换;
首先我们来看看它的结构:
1 json对象(key----value) ,JSONObject ,代表一个json对象,可以完成java对象和json字符串之间的转换;
for example: student{"name":"晓斌","age":"26","sex":"man"},不同元素之前用逗号隔开;
java对象和json字符串之间的转化:
Student stu=new Student([b]1005, "张三", "Wuhan", "zs.jpg");[/b]
JSONObject jsonObject=new JSONObject(stu);
jsonObject.toString();
JSONObject jsonObject = new JSONObject(str);
Iterator<String> iterator = jsonObject.keys();
Student stu = new Student();
while(iterator.hasNext()){
//可以利用java反射,写泛型方法
String key = iterator.next();
if(key.equals("sid")){
stu.setSid(jsonObject.getInt(key));
}
if(key.equals("name")){
stu.setName(jsonObject.getString(key));
}
if(key.equals("sid")){
stu.setAddr(jsonObject.getString(key));
}
if(key.equals("sid")){
stu.setPic(jsonObject.getString(key));
}
}
方式二:
Student stu = new Student(1005, "张三", "Wuhan", "zs.jpg");
JSONObject jsonObject = new JSONObject();
jsonObject.put("zs", stu);
同样jsonObject.toString()就是字符串输出 {"zs":"{sid:1005, name:张三, addr:Wuhan, pic:zs.jpg}"}。要 注意,如果Student没有覆写toString()方法,输入的是:{"zs":"org.itair.domain.Student@2666e815"}
2 json数组JSONArray;代表一个json数组,可以完成java集合与json字符串之前的转换;
{"students":[{"sid":1001,"name":"zhangsan","addr":"Yichang","pic":"111.jpg"},
{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222.jpg"}]}
方式一、
转换:
Student s1 = new Student(1001,"zhangsan","yichang","111");
Student s2 = new Student(1002,"Jack","Beijing","222");
List<Student> stus = new ArrayList<Student>();
stus.add(s1);
stus.add(s2);
JSONArray array = new JSONArray(stus);
array的字符串是:[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]
解析:
JSONArray jsonArray = new JSONArray("要解析的json字符串");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
//解析成特定的对象操作,new对象,从jsonObject2取出值来装进去
Iterator<String> iterator = jsonObject2.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = jsonObject2.get(key);
map.put(key, value);
}
}
方式二、
转换:
Student s1 = new Student(1001,"zhangsan","yichang","111");
Student s2 = new Student(1002,"Jack","Beijing","222");
List<Student> stus = new ArrayList<Student>();
stus.add(s1);
stus.add(s2);
JSONObject jsonObject = new JSONObject();
jsonObject.put("students", stus);
jsonObject的字符串:{"students":[{"sid":1001,"name":"zhangsan","addr":"yichang","pic":"111"},{"sid":1002,"name":"Jack","addr":"Beijing","pic":"222"}]}
解析:
由于上面的转换方式是把集合对象放到 JSONObject中。
JSONObject jsonObject = new JSONObject("要解析的json字符串");
JSONArray jsonArray = jsonObject.getJSONArray("key");//key就是上面放入的students
后面的代码同上循环。
在Android的项目中,一般不会把Json字符串解析成对象的集合,而多是解析成List<Map<String,Object>>
List<Map<String,Object>> list = new ArrayList<Map<String ,Object>>();
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
Map<String ,Object> map = new HashMap<String, Object>();
Iterator<String> iterator = jsonObject2.keys();
while (iterator.hasNext()) {
String key = iterator.next();
Object value = jsonObject2.get(key);
map.put(key, value);
}
list.add(map);
}
要解析成对象集合,还是用Gson, fastjson比较方便。
相关文章推荐
- Android json数据解析详解及实例代码
- android解析json数据的详解实例
- android中json数据分析及解析详解
- Android开发之JSON数据解析详解(二)
- android之解析json数据格式详解
- 【Android】解析JSON数据详解
- Android开发之JSON数据解析详解(一)
- android 数据解析 JSON 开发详解+视频
- android中json数据解析详解
- android中json数据的解析
- Android 获取Google Weather API 并通过Xml和JSON解析数据
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- jQuery学习笔记--ajax查询,jQuery解析返回的json数据 详解
- Android中使用Gson解析JSON数据
- android 解析json数据格式
- Android 解析json数据格式
- android中解析服务器发过来的JSON数据
- android 解析json数据格式(整合)
- android 解析json数据格式
- android 解析json数据格式