Android学习手册:JSON解析工具比较
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解析工具比较相关推荐
- Android学习之Json解析库Gson
接着上一篇Volley,在使用Volley加载好数据之后,我们肯定不能直接使用这个数据,一般获取的数据都会是Json格式,所以自然而然我们要处理下Json,网络上有很多Json解析库,这里我使用Gso ...
- Android 中的Json解析工具fastjson 、序列化、反序列化
Android中通常需要访问服务器,然而服务器返回的数据很多时候都是Json格式 1.fastjson简介 阿里巴巴FastJson是一个Json处理工具包,包括"序列化"和&qu ...
- [Android开发] Json解析工具类,一个类搞定Json的解析
一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...
- 自定义Json解析工具
此博客为博主原创文章,转载请标明出处,维权必究:https://www.cnblogs.com/tangZH/p/10689536.html fastjson是很好用的json解析工具,只可惜项目中要 ...
- 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...
- Json解析工具Jackson(使用注解)
接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给我们提供了一系列注解,提高了开发的灵活性,下面介绍一下最常用的一些注解 @JsonIgnoreProperties ...
- JSON解析工具比较,主要GSON和FastJSON
转自:http://www.cnblogs.com/kunpengit/p/4001680.html 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的 ...
- Android JSONObject – Android中的JSON解析
Android JSONObject is used for JSON parsing in android apps. In this tutorial we'll discuss and impl ...
- Java:JSON解析工具-org.json
一.简介 org.json是Java常用的Json解析工具,主要提供JSONObject和JSONArray类,现在就各个类的使用解释如下. 二.准备 1.在使用org.json之前,我们应该先从该网 ...
- json解析工具(json解析工具 python)
常用的xml,json解析工具有哪些 1.定义介绍 (1).XML定义 扩展标记语言 (Extensible Markup Language, XML) ,用于标记电子文件使其具有结构性的标记语言,可 ...
最新文章
- PHP日期格式转时间戳
- 运营商级网络地址转换(LSN/CGN)方案介绍
- c# 监视目录下的文件变化
- 关于团队建设,穆帅能教我们什么?
- 吴恩达机器学习笔记57-基于内容的推荐系统(Content Based Recommendations)
- vmware nat模式网络不通_笨笨狗教你如何解决VMware虚拟机桥接网络不通问题?
- Derby的jar说明
- 我今年89岁,刚刚拿了个物理学博士学位
- Cloud一分钟 | HR SaaS 平台北森云计算E轮融资1亿美金;云学堂宣布完成C轮5000万美元融资...
- 《天天数学》连载34:二月三日
- python画离散点_python画散点图
- python2 爬虫value_53. Python 爬虫(2)
- php微信回调验证签名,微信支付回调验证签名处理
- 手把手教你搭建FastDFS集群(上)
- 机器视觉经典案例-表面划伤检测案例
- 格律诗的基本知识【一小时学会写格律诗】
- win7 安装MySQL 5.7.
- SpringBoot 2.x 自定义注解annotation实现MicroMeter埋点
- 解决REFERENCEERROR: primordials is not defined问题
- 基于STM32小熊派开发智慧路灯项目实践
热门文章
- VC6.0内存泄露检测工具
- 【windows10】对系统盘瘦身
- Windows10电脑重置后右键没有nvidia控制面板的问题
- java jdk 64 1.8_JDK1.8 64位官方下载
- 【官方文档】Fluent Bit 安装
- linux自带perl加密,关于加密:如何在Perl脚本中加密或隐藏密码?
- 【联合路由频谱分配】多跳认知无线电网络中的联合路由和动态频谱分配的matlab仿真与分析
- Java、Java Web面试题(来源于MLDN、北方网)
- 微课计算机教学研究案例,《微课在中学信息技术教学中有效运用的案例研究》的开题报告...
- 嵌入式软件开发好,还是硬件开发好?