JSON是一种轻量级的数据交换格式,具有良好的可读性和便于快速编写的特性。可以在不同的平台间进行数据交换。JSON是JavaScript对象表示语法的子集。JSON的值由数字(整数或浮点数)、字符串(在双引号内)、逻辑值(true或false)、数组(使用方括号[]包围)、对象(使用花括号{}包围)、null等组成,JSON中有且只有两种结构:对象数组

  • 对象:在JSON数据中是{ }括起来的内容,数据结构为{key:value,key:value,…}的键值对结构。在面向对象的语言中,key为对象的属性,value为对应的属性值,属性值的类型可以是数字、字符串、数组、对象等。
  • 数组:在JSON中是[ ]扩起来的内容,数据结构为[“java”,“c”,“c++”,…],使用索引获取值,字段值的类型可以是数字、字符串、数组、对象等。

Android解析JSON数据的方法和XML解析类似,主要有两种: 基于事件驱动基于文档驱动解析方式

  • 基于事件驱动
    主流方式:Gson解析和Jackson解析
  • 基于文档驱动
    主流方式:Android Studio自带org.json解析
    解析方式:基于文档驱动,类似于XML的DOM解析方法,先把全部文件读入到内存中,然后遍历所有数据,然后根据需要检索想要的数据。

一、json-lib

json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实在于依赖于很多第三方包,包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。

json-lib在功能和性能上面都不能满足现在互联网化的需求。


二、Jackson

相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。

Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。

Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式。

解析原理:
基于事件驱动,与GSON相同,先创建一个对应于JSON数据的JavaBean类就可以通过简单的操作解析出所需JSON数据。但和Gson解析不同的是,GSON可按需解析,即创建的JavaBean类不一定完全涵盖所要解析的JSON数据,按需创建属性,但Jackson解析对应的JavaBean必须把Json数据里面的所有key都有所对应,即必须把JSON内的数据所有解析出来,无法按需解析。但Jackson的解析速度和效率都要比GSON高


三、org.json

org.json为官方提供的JSON数据解析方法,解析代码非常简单。由于JSON数据只有JSON对象和JSON数组两种结构,因此org.json包提供了JSONObject和JSONArray两个类对JSON数据进行解析。

  • 使用JSONObject来解析JSON对象
  • 使用JSONArray来解析JSON数组

将服务器返回的JSON数据传入一个JSONObject对象中,然后循环遍历这个JSONArray,从中取出的每一个数据都是JSONObject对象,接下来调用getString()方法将JSONObject对象所包含的数据取出。


四、GSON(Google)

Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,但自从在2008年五月公开发布第一版后已被许多公司或用户应用。

Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。

而在使用这种对象转换之前,需先创建好对象的类型以及其成员,才能成功的将JSON字符串成功转换成相对应的对象。

类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。

Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。

GSON特点:

  • 快速、高效
  • 代码量少、简洁
  • 面向对象
  • 数据传递和解析方便

GSON解析的关键是重点是要根据json数据里面的结构写出一个对应的javaBean,规则是:

  • JSON的大括号对应一个对象,对象里面有key和value(值)。在JavaBean里面的类属性要和key同名
  • JSON的方括号对应一个数组,所以在JavaBeanBean里面对应的也是数组,数据里面可以有值或者对象。
  • 如果数组里面只有值没有key,就说明它只是一个纯数组,如果里面有值有key,则说明是对象数组。纯数组对应JavaBean里面的数组类型,对象数组要在Bean里面建立一个内部类,类属性就是对应的对象里面的key,建立了之后要创建一个这个内部类的对象,名字对应数组名。
  • 对象里面嵌套对象时候,也要建立一个内部类,和对象数组一样,这个内部类对象的名字就是父对象的key。

注:JavaBean类里的属性不一定要全部和JSON数据里的所有key相同,可以按需取数据,也就是你想要哪种数据,就把对应的key属性写出来,注意名字一定要对应


五、FastJson(阿里巴巴)

Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。

无依赖,不需要例外额外的jar,能够直接跑在JDK上。

FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。

FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。

FastJson特点:

  • 快速FAST(比其它任何基于Java的解析器和生成器更快,包括jackson)
  • 强大(支持普通JDK类包括任意JavaBean Class、Collection、Map、Date或enum)
  • 零依赖(没有依赖其他任何类库除了JDK)
  • 支持注解、支持全类型序列化

六、总结

综上5种Json技术的比较,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,如果只是功能要求,没有性能要求,可以使用google的Gson,如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean。


Android学习手册:JSON解析工具比较相关推荐

  1. Android学习之Json解析库Gson

    接着上一篇Volley,在使用Volley加载好数据之后,我们肯定不能直接使用这个数据,一般获取的数据都会是Json格式,所以自然而然我们要处理下Json,网络上有很多Json解析库,这里我使用Gso ...

  2. Android 中的Json解析工具fastjson 、序列化、反序列化

    Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括"序列化"和&qu ...

  3. [Android开发] Json解析工具类,一个类搞定Json的解析

    一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...

  4. 自定义Json解析工具

    此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...

  5. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)

    Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...

  6. Json解析工具Jackson(使用注解)

    接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...

  7. JSON解析工具比较,主要GSON和FastJSON

    转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...

  8. Android JSONObject – Android中的JSON解析

    Android JSONObject is used for JSON parsing in android apps. In this tutorial we'll discuss and impl ...

  9. Java:JSON解析工具-org.json

    一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...

  10. json解析工具(json解析工具 python)

    常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...

最新文章

  1. PHP日期格式转时间戳
  2. 运营商级网络地址转换(LSN/CGN)方案介绍
  3. c# 监视目录下的文件变化
  4. 关于团队建设,穆帅能教我们什么?
  5. 吴恩达机器学习笔记57-基于内容的推荐系统(Content Based Recommendations)
  6. vmware nat模式网络不通_笨笨狗教你如何解决VMware虚拟机桥接网络不通问题?
  7. Derby的jar说明
  8. 我今年89岁,刚刚拿了个物理学博士学位
  9. Cloud一分钟 | HR SaaS 平台北森云计算E轮融资1亿美金;云学堂宣布完成C轮5000万美元融资...
  10. 《天天数学》连载34:二月三日
  11. python画离散点_python画散点图
  12. python2 爬虫value_53. Python 爬虫(2)
  13. php微信回调验证签名,微信支付回调验证签名处理
  14. 手把手教你搭建FastDFS集群(上)
  15. 机器视觉经典案例-表面划伤检测案例
  16. 格律诗的基本知识【一小时学会写格律诗】
  17. win7 安装MySQL 5.7.
  18. SpringBoot 2.x 自定义注解annotation实现MicroMeter埋点
  19. 解决REFERENCEERROR: primordials is not defined问题
  20. 基于STM32小熊派开发智慧路灯项目实践

热门文章

  1. VC6.0内存泄露检测工具
  2. 【windows10】对系统盘瘦身
  3. Windows10电脑重置后右键没有nvidia控制面板的问题
  4. java jdk 64 1.8_JDK1.8 64位官方下载
  5. 【官方文档】Fluent Bit 安装
  6. linux自带perl加密,关于加密:如何在Perl脚本中加密或隐藏密码?
  7. 【联合路由频谱分配】多跳认知无线电网络中的联合路由和动态频谱分配的matlab仿真与分析
  8. Java、Java Web面试题(来源于MLDN、北方网)
  9. 微课计算机教学研究案例,《微课在中学信息技术教学中有效运用的案例研究》的开题报告...
  10. 嵌入式软件开发好,还是硬件开发好?