在搜索了一些现有的JSON库后,我终于得到了这两个:
Jackson
Google GSon
我对GSON有点偏爱,但网上的消息是GSon遭受了某种天体表现issue(截至2009年9月) .
我继续比较;与此同时,我正在寻求帮助来决定我的想法 .
我上周做了这项研究,最后得到了相同的2个库 . 正如我所做的那样,对我来说更自然 . 2 lib几乎相同......最后它们只是映射到json文件! :)
无论如何,正如你所说 Jackson 有一个表现,这对我来说非常重要 . 从their web page可以看到该项目也非常活跃,这也是一个非常好的迹象 .
似乎GSon不支持JAXB . 通过使用JAXB注释类来创建或处理JSON消息,我可以使用spring MVC共享同一个类来创建Restful Web Service接口 .
Jackson和Gson是关于实际数据绑定支持的最完整的Java JSON包;许多其他包只提供原始Map / List(或等效树模型)绑定 . 两者都完全支持泛型类型,以及许多常见用例的足够可配置性 .
由于我对 Jackson 比较熟悉,我认为 Jackson 在某些方面比Gson有更完整的支持(如果我错过Gson功能,我会道歉):
广泛的注释支持;包括完全继承和高级"mix-in"注释(对于无法直接添加它们的情况,将注释与类关联)
流式(增量)读取,写入,用于超高性能(或内存限制)用例;可以与数据绑定混合(绑定子树) - EDIT :最新版本的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更快 .
添加上面已经给出的其他答案 . 如果案件不敏感对你很重要,那就用 Jackson 吧 . Gson不支持关键名称不区分大小写,而 Jackson 则支持 .
这是两个相关的链接
(否)Gson的案例敏感性支持:GSON: How to get a case insensitive element from Json?
Jackson案例敏感性支持https://gist.github.com/electrum/1260489
5 回答
我上周做了这项研究,最后得到了相同的2个库 . 正如我所做的那样,对我来说更自然 . 2 lib几乎相同......最后它们只是映射到json文件! :)
无论如何,正如你所说 Jackson 有一个表现,这对我来说非常重要 . 从their web page可以看到该项目也非常活跃,这也是一个非常好的迹象 .
似乎GSon不支持JAXB . 通过使用JAXB注释类来创建或处理JSON消息,我可以使用spring MVC共享同一个类来创建Restful Web Service接口 .
Jackson和Gson是关于实际数据绑定支持的最完整的Java JSON包;许多其他包只提供原始Map / List(或等效树模型)绑定 . 两者都完全支持泛型类型,以及许多常见用例的足够可配置性 .
由于我对 Jackson 比较熟悉,我认为 Jackson 在某些方面比Gson有更完整的支持(如果我错过Gson功能,我会道歉):
广泛的注释支持;包括完全继承和高级"mix-in"注释(对于无法直接添加它们的情况,将注释与类关联)
流式(增量)读取,写入,用于超高性能(或内存限制)用例;可以与数据绑定混合(绑定子树) - EDIT :最新版本的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更快 .
添加上面已经给出的其他答案 . 如果案件不敏感对你很重要,那就用 Jackson 吧 . Gson不支持关键名称不区分大小写,而 Jackson 则支持 .
这是两个相关的链接
(否)Gson的案例敏感性支持:GSON: How to get a case insensitive element from Json?
Jackson案例敏感性支持https://gist.github.com/electrum/1260489