本文转自:http://iandroiddev.com/post/2011-10-08/5646446
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。
Android的SDK中包含四个与JSON相关的类和一个Exceptions:JSONArray、JSONObject、JSONStringer、JSONTokener、JSONException。通过这5个类我们就可以自行对Json进行解析(使用很简单,可以网上搜索使用方法或者参照Android SDK),另外Google在Android的SDK中放入了JsonReader和JsonWriter来方便我们读写Json。但是通过他们读写Json还都要停留到手工操作上,无法直接实现Json字符串到对象、对象到Json字符串的转换,例如解析Json需要通过Key值一个一个的取Value,工作量大不说,还增加了出错的几率。有没有办法可以:直接实现Json字符串到对象、对象到Json字符串的转换?
在Java EE中使用最广泛的是Jackson Json(据说是集成到Spring中的,我不太清楚),使用非常方便而且效率极高;另外还有两个比较有名气的是Gson和JSON-lib,某些大侠已经对它们做了对比实验,结论如下执行效率:Jackson>Gson>JSON-lib,但是鉴于我们要将解析库集成到Android应用当中,我们还要考虑一下嵌入的库的体积,分别取他们的最新版本:
jackson-all-1.9.0.jar 1.1MB
gson-1.7.1.jar 174KB
json-lib-2.4-jdk15.jar 159KB (2010年12月开始已经停止更新了)
通过这个比较我们几乎可以直接排除掉jackson(为了解析JSON方便而让软件增加1.1MB?),而json lib执行效率低下且已经停止了更新,我们也不希望选用。另外jackson生于Jave EE,完全符合java bean惯例是对getter进行序列化,而gson是对成员变量field进行序列化,Android恰恰是推荐开发者直接使用成员变量访问而不是用setter、getter。最终我们选择了Google出品的Gson,至于Gson如何使用,欢迎关注下一篇文章。
相关参考:
android SDK:android json解析
gson: android:使用Gon解析解析json
jackson: Jackson 框架,轻易转换JSON(一)
json-lib: JSON-lib框架,转换JSON、XML不再困难