jacksonVS. Gson

在search了一些现有的JSON库之后,我终于find了这两个:

  • jackson
  • Google GSon

我对GSON有些偏袒,但networking上的一句话是GSon遭受了某种天体性能问题 (截至2009年9月)。

我正在继续我的比较; 在此期间,我正在寻求帮助来下定决心。

上周我做了这个研究,最后我用了两个相同的库。 因为我使用的是Spring 3(在默认的Json视图“ JacksonJsonView ”中采用了Jackson),所以我更自然的做到这一点。 2 lib几乎是相同的…在最后,他们只是映射到一个JSON文件! 🙂

无论如何,正如你所说的jackson的performance+,这对我来说非常重要。 从他们的网页上可以看出,这个项目也很活跃,这也是一个很好的标志。

Jackson和Gson是关于实际数据绑定支持的最完整的Java JSON包; 许多其他软件包只提供原始的Map / List(或等效树模型)绑定。 两者都对genericstypes有完整的支持,对于许多常见的使用情况来说也具有足够的可configuration性。

由于我对jackson更加熟悉,以下是我认为jackson比Gson更全面的支持的一些方面(如果我错过了Gson的function,我深表歉意):

  • 广泛的注释支持; 包括完整的inheritance,以及高级的“混合”注释(在不能直接添加注释的情况下将注释与类关联)
  • stream式(增量)读取,写入,用于超高性能(或内存有限)用例; 可以混合使用数据绑定(绑定子树) – 编辑 :最新版本的Gson也包括stream媒体阅读器
  • 树模型(DOM类访问); 可以在各种模型之间转换(tree < – > java object < – > stream)
  • 可以使用任何构造函数(或静态工厂方法),而不仅仅是默认的构造函数
  • 字段和getter / setter访问(早期gson版本只使用字段,这可能已经改变)
  • 开箱即用的JAX-RS支持
  • 互操作性:也可以使用JAXB注释,支持常用包(joda,ibatis,cglib),JVM语言(groovy,clojure,scala)
  • 能够强制输出的静态(声明)types处理
  • 支持反序列化多态types(Jackson 1.5) – 可以正确序列化和反序列化List之类的东西(附加的types信息)
  • 对二进制内容的集成支持(来自/来自JSONstring的base64)

Gson 1.6现在包含一个低级streamAPI和一个比Jackson更快的parsing器。

添加到上面已经给出的其他答案。 如果不区分大小写对你来说很重要,那就用Jackson吧。 Gson不支持键名不区分大小写,而jackson则不支持。

这里有两个相关的链接

(否)Gson中的区分大小写支持: GSON:如何从Json中获取不区分大小写的元素?

区分大小写支持jacksonhttps://gist.github.com/electrum/1260489

看来GSon不支持JAXB。 通过使用JAXB注释类创build或处理JSON消息,我可以使用spring MVC共享同一个类来创buildRestful Web Service接口。