388

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

  • 杰克逊
  • 谷歌GSon

我对 GSON 有点偏,但网上的消息是 GSON 存在某种天体性能问题(截至 2009 年 9 月)。

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

4

5 回答 5

127

我上周进行了这项研究,最终得到了相同的 2 个库。由于我使用的是 Spring 3(在其默认的 Json 视图“ JacksonJsonView ”中采用 Jackson),因此我更自然地做同样的事情。2个库几乎相同......最后它们只是映射到一个json文件!:)

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

于 2010-03-04T10:52:56.137 回答
87

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

由于我对 Jackson 比较熟悉,因此我认为 Jackson 在某些方面比 Gson 支持更完整(如果我错过了 Gson 功能,请致歉):

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

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

于 2011-01-21T23:30:25.153 回答
14

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

这里有两个相关链接

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

Jackson 中的区分大小写支持 https://gist.github.com/electrum/1260489

于 2014-04-03T04:18:17.867 回答
7

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

于 2011-01-24T17:00:44.937 回答