地址:http://blog.jobbole.com/65181/
在本部分中,我们将探讨一些市场上存在的JSON解析类库,我们在应用开发中可以使用其中的任何一个,在改善应用性能的同时也提高了生产力。
此前我写过一篇关于使用 org.json包下面的类进行”JSON解析”的文章。如果你不了解JSON解析或者没有读过那篇文章,那么点这里:Android中的JSON解析。
现在我们不使用原生的包(org.json)和它的类,如果我们使用一些网上存在的JSON解析类库,我们可以改善应用的性能,下面列出了Android开发者们广泛使用的2个类库:
1. GSON
2. Jackson
在探讨和研究这些类库之前,让我们深入的了解一下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响应/文档的时候这可能不是一个好主意,并且是很低效的。
为了提供一个备选并且克服上述的问题,Google提供了一个JSONReader,它将数据流作为数据,和SAX一样,但是这个类在API级别11和更高版本上可用,所以如果你想兼容低版本,它没有任何的相关功能。
但是你可以通过使用GSON类库来为低版本提供兼容性,因为Google已经将它开源并提供了JAR文件。
总体上来说,android.util.JsonReader和com.google.gson.stream.JSONReader代码一样,但是使用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);
|
这是另一个多用途、开源的处理JSON数据格式的Java类库。正像他们网站上说的,Jackson的目标是成为快速、正确、轻量、符合人体工程学的最佳组合。
你可以从这里下载Jackson类库:http://wiki.fasterxml.com/JacksonDownload ,在这里阅读文档:http://wiki.fasterxml.com/JacksonDownload;
哪个类库是最好的取决于你的考虑,无论是在改善性能,代码优化,或者优化UI或者其他方面。
在减少代码量方面,这两个库都很好,我的意思是你可以使用任何一个库来减少样例代码。
在性能方面,Jackson提供了较好的性能,并且解析速度快,某个人已经做过了JSON解析器的对比,找找看!
希望你喜欢这一期的”做一个懒惰高效的Android程序员”,在这里我们探讨了JSON解析类库和使用任意一个的好处,希望你会使用其中的某一个,并帮助你提高生产力。
在下部分之前,享受解析过程吧!