标签:
android原生操作json数据
主要是两个类 JSONObject 操作对象 JONSArray操作json数组
对象转json
1 //创建学生对象
2 Student student=new Student();
3 student.setAge(23);
4 student.setClazz("六年级");
5 student.setName("王二麻子");
6 //创建JSONObject
7 JSONObject jsonObject=new JSONObject();
8 //键值对赋值
9 jsonObject.put("age",student.getAge());
10 jsonObject.put("name",student.getName());
11 jsonObject.put("clazz",student.getClazz());
12 //转化成json字符串
13 String json=jsonObject.toString();
14 //输出日志
15 Log.e("ObjectToJson",json);
Log日志显示
json转对象
新建一个JSONObject 把json串通过构造方法赋值 这个JSONObject 对象就带有json的值 然后创建对象 一个一个赋值 JSONObject 对于不同类型的值 有不同的get方法
1 JSONObject jsonObject=new JSONObject(json);
2 Student student=new Student();
3 student.setName(jsonObject.getString("name"));
4 student.setClazz(jsonObject.getString("clazz"));
5 student.setAge(jsonObject.getInt("age"));
6 Log.e("JsonToObject",student.getName()+"======"+student.getClazz()+"===="+student.getAge());
List转json
使用JONSArray
1 //创建一个集合
2 List<Student> students=new ArrayList<Student>();
3 students.add(student);
4 students.add(student);
5 //创建一个JSONArray
6 JSONArray jsonArray=newJSONArray();
7 //遍历学生集合
8 for(inti=0;i<students.size();i++){
9 //获取学生对象
10 Studentstu=students.get(i);
11 //创建JSONObject
12 JSONObject jo=newJSONObject();
13 //赋值
14 jo.put("age",stu.getAge());
15 jo.put("name",stu.getName());
16 jo.put("clazz",stu.getClazz());
17 //把JSONObject 添加到JSONArray
18 jsonArray.put(jo);
19 }
20 //toString转为json
21 String json=jsonArray.toString();
22 Log.e("ListToJson",json);
json转List
1 //创建JSONArray把json传入
2 JSONArray jsonArray=new JSONArray(json);
3 //创建学生集合
4 Student students=new ArrayList<Student>();
5 Log.e("BeforeJsonToList","集合长度"+students.size());
6 //遍历jsonArray
7 for(inti=0;i<jsonArray.length();i++){
8 //获取JSONObject对象
9 JSONObject jsonObject=jsonArray.getJSONObject(i);
10 //创建学生对象
11 Student stu=new Student();
12 //赋值
13 jsonObject.put("age",stu.getAge());
14 jsonObject.put("name",stu.getName());
15 jsonObject.put("clazz",stu.getClazz());
16 //把学生对象添加到集合中
17 students.add(stu);
18 }
19 Log.e("AfterJsonToList","集合长度"+students.size());
注意 :在使用JSONObject和JSONArray的过程中是需要捕获异常的
有没有感觉很麻烦,这要是数据多了简直是要累死人了
变简单的方法就是下载一个号称史上最快json操作的fastjson.jar 阿里出品 然后使用就简单了
FastJson操作数据
对象转json
1 //创建学生对象
2 Student student=new Student();
3 student.setClazz("一班");
4 student.setAge(23);
5 student.setName("李四");
6 //将对象转为json串
7 String json=JSON.toJSONString(student);
8 Log.e("ObjectToJson",json);
只有一句话 就完成了 简单到爆有没有 感谢马云粑粑!!!
json转对象
1 //将json转为对象 参数1json 参数2对象类型
2 Student student=JSON.parseObject(json,Student.class);
3 Log.e("JsonToObject","=========="+student.getName());
同样只有一句话 相对于android原生真是感人
list转json
1 List<Student>stuList=new ArrayList<Student>();
2 stuList.add(student);
3 stuList.add(student);
4 stuList.add(student);
5 //List集合转json
6 json=JSON.toJSONString(stuList);
7 Log.e("ListToJson","=========="+json);
集合中添加了三个同一个对象 json字符串的输出 就变成了 ref,{0} 很明显这是引用第一个对象 因为你添加了相同的对象 fastjson就不创建了 直接引用 这也是他号称最快的原因
但是随之而来的就有一个问题 fastjson识别引用 其他的jar不识别 如果服务器使用fastjson 客户端使用gson 怎么办嘞
1,都使用fastjson
2.在转json的时候设置一条属性 禁用循环引用对象 就ok
1 json=JSON.toJSONString(stuList,SerializerFeature.DisableCircularReferenceDetect);
json转list
1 stuList=JSON.parseArray(json,Student.class);
2 Student student1=stuList.get(0);
3 Log.e("JsonToList","====================="+student1.getName());
有时候呢 并不需要对象里的所有字段 这时候就可以设置一个属性过滤器 把你不需要的字段过滤掉
1 //过滤字段 属性过滤器PropertyFilter
2 json=JSON.toJSONString(stuList, new PropertyFilter() {
3 @Override//参数1 正在被过滤的对象 参数2 过滤的属性名 参数3 属性值
4 public boolean apply(Object o, String s, Object o1) {
5 Log.e("PropertyFilter",o+"======"+s+"==============="+o1);
6 if (s.equals("name")){
7 return false;
8 }else{
9 return true;
10 }
11
12 }
13 });
14 Log.e("PropertyFilter",json);
设置name过滤 请看log日志
在介绍一种情况
定义了一个泛型类
里面有一个学生对象 和一个字符串
把对象转json
当我们要把这个json转为对象的时候问题就来了
这时候就需要实现TypeReference类 把对象封装一下
完美解决 凡是带泛型的都可以使用TypeReference
最后给大家介绍一个网站 http://json.cn/ 特别强大 会自动格式化json 如果有语法错误也会报错滴
标签:
原文地址:http://www.cnblogs.com/r-decade/p/5819916.html