android原生操作json数据

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

对象转json

           //创建学生对象
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方法

  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

  

 //创建一个集合
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
12   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);

json转List

  

 //创建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();
12   //赋值
13   jsonObject.put("age",stu.getAge());
  jsonObject.put("name",stu.getName());
  jsonObject.put("clazz",stu.getClazz());
16   //把学生对象添加到集合中
  students.add(stu);
}
Log.e("AfterJsonToList","集合长度"+students.size());

注意 :在使用JSONObject和JSONArray的过程中是需要捕获异常的

有没有感觉很麻烦,这要是数据多了简直是要累死人了

变简单的方法就是下载一个号称史上最快json操作的fastjson.jar  阿里出品  然后使用就简单了

FastJson操作数据

  对象转json

 //创建学生对象
Student student=new Student();
student.setClazz("一班");
student.setAge(23);
student.setName("李四");
//将对象转为json串
String json=JSON.toJSONString(student);
Log.e("ObjectToJson",json);

只有一句话 就完成了 简单到爆有没有   感谢马云粑粑!!!

json转对象

 //将json转为对象 参数1json  参数2对象类型
Student student=JSON.parseObject(json,Student.class);
Log.e("JsonToObject","=========="+student.getName());

同样只有一句话  相对于android原生真是感人

list转json

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

集合中添加了三个同一个对象   json字符串的输出 就变成了 ref,{0}  很明显这是引用第一个对象     因为你添加了相同的对象   fastjson就不创建了  直接引用  这也是他号称最快的原因

但是随之而来的就有一个问题     fastjson识别引用 其他的jar不识别        如果服务器使用fastjson  客户端使用gson  怎么办嘞

1,都使用fastjson

2.在转json的时候设置一条属性    禁用循环引用对象 就ok

 json=JSON.toJSONString(stuList,SerializerFeature.DisableCircularReferenceDetect);

json转list

 stuList=JSON.parseArray(json,Student.class);
Student student1=stuList.get(0);
Log.e("JsonToList","====================="+student1.getName());

有时候呢  并不需要对象里的所有字段    这时候就可以设置一个属性过滤器  把你不需要的字段过滤掉

     //过滤字段  属性过滤器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);

设置name过滤   请看log日志

在介绍一种情况

定义了一个泛型类

里面有一个学生对象 和一个字符串

把对象转json

当我们要把这个json转为对象的时候问题就来了

这时候就需要实现TypeReference类 把对象封装一下

完美解决  凡是带泛型的都可以使用TypeReference

最后给大家介绍一个网站 http://json.cn/   特别强大 会自动格式化json   如果有语法错误也会报错滴

Android原生json和fastjson的简单使用的更多相关文章

  1. Android 中Json解析的几种框架(Gson、Jackson、FastJson、LoganSquare)使用与对比

    介绍 移动互联网产品与服务器端通信的数据格式,如果没有特殊的需求的话,一般选择使用JSON格式,Android系统也原生的提供了JSON解析的API,但是它的速度很慢,而且没有提供简介方便的接口来提高 ...

  2. 高性能JSON框架之FastJson的简单使用

    1.前言 1.1.FastJson的介绍: JSON协议使用方便,越来越流行,JSON的处理器有很多,这里我介绍一下FastJson,FastJson是阿里的开源框架,被不少企业使用,是一个极其优秀的 ...

  3. Android原生生成JSON与解析JSON

    JSON数据是一种轻量级的数据交换格式,在Android中通常应用于client与server交互之间的传输数据.像如今在网上有非常多解析JSON数据的jar包,可是归根究竟用的都是Android原生 ...

  4. android Json Gson FastJson 解析

    一 Json xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:a ...

  5. Android解析Json速度最快的库:json-smart

    场景描写叙述: 本文仅验证了在安卓环境下使用Json的Key作为反序列化条件的解析速度.结论是解析速度最快的不是阿里的fastjson,也不是Google的Gson,而是json-smart. And ...

  6. 浅谈Android项目----JSON解析(4种解析技术详解)

    json简介 1.概念:json全称是javaScript object Notation,是一种并轻量级的数据交换格式. 2.特点: 1.本质就是具有特定格式的字符串 2.json完全独立于编程语言 ...

  7. 快速上手Unity原生Json库

    现在新版的Unity(印象中是从5.3开始)已经提供了原生的Json库,以前一直使用LitJson,研究了一下Unity用的JsonUtility工具类的使用,发现使用还挺方便的,所以打算把项目中的J ...

  8. uni-app&H5&Android混合开发三 || uni-app调用Android原生方法的三种方式

    前言: 关于H5的调用Android原生方法的方式有很多,在该片文章中我主要简单介绍三种与Android原生方法交互的方式. 一.H5+方法调用android原生方法 H5+ Android开发规范官 ...

  9. 《Android原生整合虹软SDK开发uniapp插件》

    1.项目背景 应公司要求,需要开发一套类似人脸打卡功能的app,但是因为我们公司没有很强的原生android开发者,所以根据现状选择了第三方跨平台的uniapp,想必目前大多人都了解这个平台了,我也就 ...

随机推荐

  1. Python标准模块--logging

    1 logging模块简介 logging模块是Python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件回滚等:相比print,具备如下优点: 可以通过设置不同 ...

  2. ASP.NET MVC5 网站开发实践(二) Member区域 - 文章管理架构

    上次把member的用户部分完成,现在开始做文章管理部分.文章部分根据涉及显示现实文章列表,发布文章,修改文章,删除文章等功能.最终的实现目标是使用权限来控制用户是否能进行相应操作,管理员权限的会显示 ...

  3. iOS开发之画图板(贝塞尔曲线)

    贝塞尔曲线,听着挺牛气一词,不过下面我们在做画图板的时候就用到贝塞尔绘直线,没用到绘制曲线的功能.如果会点PS的小伙伴会对贝塞尔曲线有更直观的理解.这篇博文的重点不在于如何用使用贝塞尔曲线,而是利用贝 ...

  4. C/C++,彩色图像小游戏。

    这里声明,这个游戏是由本人,在大一暑假自作的第二个小游戏,转载请注明原帖地址,谢谢! 所有图片都是我一个人用ps搞出来的,比较简单.........毕竟不是学图像制作的,请体谅!另外,图片 不放出来了 ...

  5. Oracle数据库优化的经验总结

    个人理解,数据库性能最关键的因素在于IO,因为操作内存是快速的,但是读写磁盘是速度很慢的,优化数据库最关键的问题在于减少磁盘的IO,就个 人理解应该分为物理的和逻辑的优化, 物理的是指oracle产品 ...

  6. 批量导出access某表内容到word文档

    一.需求: 需要将表中每一条记录中的某些内容导出在一个word文档中,并将这些文档保存在指定文件夹目录下 二.界面,简单设计如下: 三.添加office相关引用 添加后可在解决方案资源管理器中看到: ...

  7. placeholder的样式设置

    在input框中有时想将输入的字和placeholder设为不同的颜色或其它效果,这时就可以用以下代码来对placeholder进行样式设置了. ::-webkit-input-placeholder ...

  8. C标准头文件<signal.h>

    信号即异常,或者理解为中断,一个进程接收到一个信号,如果没有处理机制,就会按照默认的处理方式进行处理,而默认的处理方式通常是终止当前进程或忽略该信号.当然,程序也可以编写相应的处理信号的函数,一旦接收 ...

  9. MATLAB连接ACCESS数据库

    1.创建Windows系统ODBC数据源<打开控制面板----管理工具----ODBC数据源(32位或64位)----添加----安装数据源的驱动程序Microsoft Access Drive ...

  10. php实现设计模式之 桥接模式

    <?php /** 桥接模式:将抽象部分与实现部分分离,使它们都可以独立的变化. * * 在软件系统中,某些类型由于自身的逻辑,它具有两个或多个维度的变化,桥接模式就是应对这种多维度的变化 */ ...