Android原生json和fastjson的简单使用


 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   如果有语法错误也会报错滴

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM