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> |