栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 移动开发 > Android

详解Android原生json和fastjson的简单使用

Android 更新时间: 发布时间: IT归档 最新发布 模块sitemap

详解Android原生json和fastjson的简单使用

android原生操作json数据

主要是两个类 JSonObject 操作对象     JONSArray操作json数组

对象转json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//创建学生对象   
    Student student=new Student();
    student.setAge(23);
    student.setClazz("六年级");
    student.setName("王二麻子");
    //创建JSonObject
    JSonObject jsonObject=new JSonObject();
    //键值对赋值   
    jsonObject.put("age",student.getAge());
    jsonObject.put("name",student.getName());
    jsonObject.put("clazz",student.getClazz());
    //转化成json字符串
    String json=jsonObject.toString();
     //输出日志
    Log.e("ObjectToJson",json);

Log日志显示

json转对象

新建一个JSonObject 把json串通过构造方法赋值   这个JSonObject 对象就带有json的值     然后创建对象 一个一个赋值  JSonObject 对于不同类型的值 有不同的get方法

1
2
3
4
5
6
JSonObject jsonObject=new JSonObject(json);
Student student=new Student();
student.setName(jsonObject.getString("name"));
student.setClazz(jsonObject.getString("clazz"));
student.setAge(jsonObject.getInt("age"));
Log.e("JsonToObject",student.getName()+"======"+student.getClazz()+"===="+student.getAge());

List转json 

使用JONSArray

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//创建一个集合
List<student> students=new ArrayList<student>();
students.add(student);
students.add(student);
//创建一个JSonArray
JSonArray jsonArray=newJSonArray();
//遍历学生集合
for(inti=0;i<students.size();i++){   ="" 获取学生对象=""   studentstu="students.get(i);" 创建jsonobject=""  ="" jsonobject="" jo="newJSonObject();" 赋值=""   jo.put("age",stu.getage());=""   jo.put("name",stu.getname());=""   jo.put("clazz",stu.getclazz());="" 把jsonobject="" 添加到jsonarray=""   jsonarray.put(jo);="" }="" tostring转为json="" string="" json="jsonArray.toString();" log.e("listtojson",json);<="" pre="">
 
<p style="text-align: center"></p>
<p><strong>json转List</strong></p>
 
<pre class="brush:php;toolbar:false">//创建JSONArray把json传入
JSonArray jsonArray=new JSonArray(json);
//创建学生集合
Student students=new ArrayList<student>();
Log.e("BeforeJsonToList","集合长度"+students.size());
//遍历jsonArray
for(inti=0;i<jsonarray.length();i++){   ="" 获取jsonobject对象=""   jsonobject="" jsonobject="jsonArray.getJSonObject(i);" 创建学生对象=""   student="" stu="new" student();=""  ="" 赋值="" jsonobject.put("age",stu.getage());=""   jsonobject.put("name",stu.getname());=""   jsonobject.put("clazz",stu.getclazz());="" 把学生对象添加到集合中=""   students.add(stu);="" }="" log.e("afterjsontolist","集合长度"+students.size());<="" pre="">
 
<p style="text-align: center"></p>
<p>注意 :在使用JSONObject和JSONArray的过程中是需要捕获异常的</p>
<p>有没有感觉很麻烦,这要是数据多了简直是要累死人了</p>
<p>变简单的方法就是下载一个号称史上最快json操作的fastjson.jar  阿里出品  然后使用就简单了</p>
<p><strong>FastJson操作数据</strong></p>
<p><strong>对象转json</strong></p>
 
<pre class="brush:php;toolbar:false">//创建学生对象
Student student=new Student();
student.setClazz("一班");
student.setAge(23);
student.setName("李四");
//将对象转为json串
String json=JSON.toJSonString(student);
Log.e("ObjectToJson",json);</pre>
 
<p>只有一句话 就完成了 简单到爆有没有   感谢马云粑粑!!!</p>
<p style="text-align: center"></p>
<p><strong>json转对象</strong></p>
 
<pre class="brush:php;toolbar:false"> //将json转为对象 参数1json 参数2对象类型
 Student student=JSON.parseObject(json,Student.class);
 Log.e("JsonToObject","=========="+student.getName());</pre>
 
<p>同样只有一句话  相对于android原生真是感人</p>
<p style="text-align: center"></p>
<p><strong>list转json</strong></p>
 
<pre class="brush:php;toolbar:false">List<student>stuList=new ArrayList<student>();
stuList.add(student);
stuList.add(student);
stuList.add(student);
//List集合转json
json=JSON.toJSonString(stuList);
Log.e("ListToJson","=========="+json);</student></student></pre>
 
<p>集合中添加了三个同一个对象   json字符串的输出 就变成了 ref,{0}  很明显这是引用第一个对象     因为你添加了相同的对象   fastjson就不创建了  直接引用  这也是他号称最快的原因</p>
<p>但是随之而来的就有一个问题     fastjson识别引用 其他的jar不识别        如果服务器使用fastjson  客户端使用gson  怎么办嘞</p>
<p>1.都使用fastjson</p>
<p>2.在转json的时候设置一条属性    禁用循环引用对象 就ok</p>
<p>json=JSON.toJSonString(stuList,SerializerFeature.DisableCircularReferenceDetect);</p>
<p style="text-align: center"></p>
<p><strong>json转list</strong></p>
 
<pre class="brush:php;toolbar:false"> stuList=JSON.parseArray(json,Student.class);
 Student student1=stuList.get(0);
 Log.e("JsonToList","====================="+student1.getName());</pre>
 
<p style="text-align: center"></p>
<p>有时候呢  并不需要对象里的所有字段    这时候就可以设置一个属性过滤器  把你不需要的字段过滤掉</p>
 
<pre class="brush:php;toolbar:false">//过滤字段 属性过滤器PropertyFilter
    json=JSON.toJSonString(stuList, new PropertyFilter() {
      @Override//参数1 正在被过滤的对象   参数2 过滤的属性名 参数3 属性值
      public boolean apply(Object o, String s, Object o1) {
 Log.e("PropertyFilter",o+"======"+s+"==============="+o1);
 if (s.equals("name")){
   return false;
 }else{
   return true;
 }
      }
    });
    Log.e("PropertyFilter",json);
</pre>
 
<p>设置name过滤   请看log日志</p>
<p style="text-align: center"></p>
<p>在介绍一种情况</p>
<p>定义了一个泛型类</p>
<p>里面有一个学生对象 和一个字符串</p>
<p style="text-align: center"></p>
<p>把对象转json</p>
<p style="text-align: center"></p>
<p>当我们要把这个json转为对象的时候问题就来了</p>
<p style="text-align: center"></p>
<p>这时候就需要实现TypeReference类 把对象封装一下</p>
<p style="text-align: center"></p>
<p>完美解决  凡是带泛型的都可以使用TypeReference</p>
<p style="text-align: center"></p>
<p>最后给大家介绍一个网站 http://json.cn/   特别强大 会自动格式化json   如果有语法错误也会报错滴<br>
</p>
<p>以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持考高分网!</p></jsonarray.length();i++){></student></pre></students.size();i++){></student></student>
转载请注明:文章转载自 www.mshxw.com
本文地址:https://mshxw.com/it/160259.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号