杰克逊诉格森案

在搜索了一些现有的JSON库后,我最终得到了以下两个:

  • 杰克逊
  • 谷歌GSon

我有点偏向于GSON,但网上的消息是,GSON遭受一定的天体性能问题(截至2009年9月)。

我继续我的比较;与此同时,我正在寻求帮助,以下定决心。

195951 次浏览

我上周做了这个研究,最后得到了两个相同的库。当我使用Spring 3(在默认Json视图'JacksonJsonView'中采用Jackson)时,对我来说做同样的事情更自然。2库几乎是一样的…最后,它们只是映射到一个json文件!:)

无论如何,正如你所说,杰克逊在性能上有一个+,这对我来说非常重要。你可以从他们的网页中看到,该项目也非常活跃,这也是一个非常好的迹象

Jackson和Gson是关于实际数据绑定支持的最完整的Java JSON包;许多其他包只提供基本的Map/List(或等效的树模型)绑定。 两者都完全支持泛型类型,并且对于许多常见的用例都有足够的可配置性

因为我更熟悉杰克逊,以下是我认为杰克逊比Gson更全面的支持(如果我错过了Gson的功能,请原谅):

  • 广泛的注释支持;包括完全继承和高级“混合”注释(在不能直接添加注释的情况下,将注释与类关联)
  • 流(增量)读、写,用于超高性能(或内存有限)用例;可以混合数据绑定(绑定子树)——编辑:最新版本的Gson还包括流式阅读器
  • 树模型(dom类访问);可以在各种模型之间转换(树<-> Java对象<->流)
  • 可以使用任何构造函数(或静态工厂方法),而不仅仅是默认构造函数
  • 字段和getter/setter访问(早期的gson版本只使用字段,这可能已经更改)
  • 开箱即用的JAX-RS支持
  • 互操作性:还可以使用JAXB注释,支持/解决常见包(joda, ibatis, cglib), JVM语言(groovy, clojure, scala)
  • 对输出强制静态(声明的)类型处理的能力
  • 支持反序列化多态类型(Jackson 1.5)——可以正确地序列化和反序列化List之类的东西(带有额外的类型信息)
  • 集成支持二进制内容(base64到/从JSON字符串)

Gson 1.6现在包含了一个低级的流API和一个实际上比Jackson更快的新解析器。

GSon似乎不支持JAXB。 通过使用JAXB带注释的类来创建或处理JSON消息,我可以通过使用spring MVC共享相同的类来创建Restful Web服务接口。< / p >

加上上面已经给出的其他答案。如果不区分大小写对您很重要,那么请使用Jackson。Gson不支持键名不区分大小写,而jackson支持。

这里有两个相关的链接

(No) Gson的大小写敏感性支持: 如何从Json中获得一个不区分大小写的元素? < / p >

Jackson的大小写敏感性支持 https://gist.github.com/electrum/1260489 < / p >