杰克逊VS. GSON

时间:2010-03-04 10:20:31

标签: java json comparison gson jackson

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

  • 杰克逊
  • Google GSon

我对GSON有点偏爱,但网上的消息是GSon遭受某种天体表现issue(截至2009年9月)。

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

5 个答案:

答案 0 :(得分:111)

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

无论如何,正如你所说杰克逊在表现上有+,这对我来说非常重要。从their web page可以看出,该项目也相当活跃,这也是一个非常好的迹象。

答案 1 :(得分:80)

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字符串)

答案 2 :(得分:36)

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

答案 3 :(得分:12)

添加上面已经给出的其他答案。如果案件不敏感对你很重要,那就用杰克逊。 Gson不支持对键名称不区分大小写,而杰克逊则不支持。

以下是两个相关链接

(否)Gson中的区分大小写支持: GSON: How to get a case insensitive element from Json?

Jackson的案例敏感性支持 https://gist.github.com/electrum/1260489

答案 4 :(得分:6)

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