做一个懒惰高效的Android程序员(3)

欢迎来到”做一个懒惰但富有成效的Android开发者”系列的第3部分。如果你在JSON解析上是一个懒惰的Android开发者但又想通过使用JSON解析类库变得高效,那么本文就是为你准备的。

本系列至今:

  • 第1部分:我们看了RoboGuice,一个依赖注入类库,使用它我们可以减少基本样板代码,节省时间,从而在Android开发中提高生产力。
  • 第2部分:我们查看并探讨了Genymotion,与原生仿真器相比,是一个火箭速度、超快速的仿真器。在开发应用的时候我们可以使用Genymotion,并且可以快速的测试应用,从而提高生产力。

在本部分

在本部分中,我们将探讨一些市场上存在的JSON解析类库,我们在应用开发中可以使用其中的任何一个,在改善应用性能的同时也提高了生产力。

JSON解析

此前我写过一篇关于使用 org.json包下面的类进行”JSON解析”的文章。如果你不了解JSON解析或者没有读过那篇文章,那么点这里:Android中的JSON解析

现在我们不使用原生的包(org.json)和它的类,如果我们使用一些网上存在的JSON解析类库,我们可以改善应用的性能,下面列出了Android开发者们广泛使用的2个类库:
1. GSON
2. Jackson

“在org.json包和它的类可用的情况下我们为什么要使用这些JSON解析类库呢?”

在探讨和研究这些类库之前,让我们深入的了解一下org.json包。当有XML解析需求的时候,有2个通用的策略:
1. DOM
2. SAX

DOM(文档对象模型)将响应/数据全部都加载到内存中,允许开发者根据自己的意愿查询数据。

SAX(XML简单API)逐个节点解析,并采用从上到下的方式遍历。最主要的事情是它执行解析的时候不存储数据和以流的形式将数据展示给用户。第2个优点是和DOM相比,解析速度一样快,但是节省内存。

现在,当有JSON解析需求的时候,通常进入我们脑海的是JSONObject和JSONArray类。显然它是JSON解析默认的选择,因为它很简单,易于使用,并且从最开始的时候就可用了(API级别1)。

但JSONObject和JSONArray类遵循了DOM解析技术,所以在解析之前需要把全部的JSON数据/响应加载到字符串中,因此这是它最主要和最大的缺点。在解析大的JSON响应/文档的时候这可能不是一个好主意,并且是很低效的。

1. GSON

为了提供一个备选并且克服上述的问题,Google提供了一个JSONReader,它将数据流作为数据,和SAX一样,但是这个类在API级别11和更高版本上可用,所以如果你想兼容低版本,它没有任何的相关功能。

但是你可以通过使用GSON类库来为低版本提供兼容性,因为Google已经将它开源并提供了JAR文件。

总体上来说,android.util.JsonReader和com.google.gson.stream.JSONReader代码一样,但是使用GSON作为一个独立类库的主要好处是,它总是有最新的东西和改进。

什么是GSON

它实际上是一个独立的开源类库,用来将JSON数据转换为Java对象和反向转换。简单的说,它可以用于解析和生成JSON。GSON可以用于任意的Java对象,包括已经存在的没有源代码的对象。它只是简单地提供了toJson和fromJson方法来转换Java对象到JSON和反向转换。

你可以从这里查看更详细的信息和下载GSON类库:https://code.google.com/p/google-gson/

例如:

1
2
3
4
5
6
7
8
9
10
[
     {
         "name": "Paresh",
         "address": "ahmedabad"
     },
     {
         "name": "Hiren",
         "address": "America"
     }
]
1
2
3
Gson gson = new Gson();
Type collectionType = new TypeToken<List<PersonBean>>(){}.getType();
List<PersonBean> details = gson.fromJson(strJsonData, collectionType);

2. Jackson

这是另一个多用途、开源的处理JSON数据格式的Java类库。正像他们网站上说的,Jackson的目标是成为快速、正确、轻量、符合人体工程学的最佳组合。

你可以从这里下载Jackson类库:http://wiki.fasterxml.com/JacksonDownload ,在这里阅读文档:http://wiki.fasterxml.com/JacksonDownload;

我应该使用哪种类库,GSON或者Jackson或者其他的?

哪个类库是最好的取决于你的考虑,无论是在改善性能,代码优化,或者优化UI或者其他方面。

在减少代码量方面,这两个库都很好,我的意思是你可以使用任何一个库来减少样例代码。

在性能方面,Jackson提供了较好的性能,并且解析速度快,某个人已经做过了JSON解析器的对比,找找看!

android_json_parsing_comparison_1-576x1024

希望你喜欢这一期的”做一个懒惰高效的Android程序员”,在这里我们探讨了JSON解析类库和使用任意一个的好处,希望你会使用其中的某一个,并帮助你提高生产力。

在下部分之前,享受解析过程吧!

(P.S. 我个人从来没有在任何项目中使用过Jackson,但将在以后的某个时候研究它,写一篇关于它的文章并提供可能的代码。)

出自

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值