【问题标题】:Is there an equivalent to new Gson().toJson(Object) in FasterXML/Jackson Java library?FasterXML/Jackson Java 库中是否有等效于 new Gson().toJson(Object) 的方法?
【发布时间】:2015-08-11 10:29:44
【问题描述】:

我的问题很基本:FasterXML/Jackson Java 库中是否有与 new Gson().toJson(Object) 等效的内容?

如果是的话,哪个性能更好?

谢谢

【问题讨论】:

  • 在杰克逊new ObjectMapper().writeValueAsString(Object)

标签: java json jackson gson fasterxml


【解决方案1】:

正如@Zutty 建议的那样:

在杰克逊 new ObjectMapper().writeValueAsString(Object)

我试过了,但我得到了 com.fasterxml.jackson.databind.JsonMappingException

com.fasterxml.jackson.databind.JsonMappingException: Direct self-reference leading to cycle (through reference chain: com.learnkeeper.shared.entities.RootBook["permissionRef"]->com.googlecode.objectify.impl.ref.LiveRef["key"]->com.googlecode.objectify.Key["root"])
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter._handleSelfReference(BeanPropertyWriter.java:781)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:569)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:666)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:666)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:575)
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:666)
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:156)
at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:129)
at com.fasterxml.jackson.databind.ObjectMapper._configAndWriteValue(ObjectMapper.java:3385)
at com.fasterxml.jackson.databind.ObjectMapper.writeValueAsString(ObjectMapper.java:2779)

使用 new Gson().toJson(Object) 我得到了一个不错的 Json

{"id":4512395720392704,"origin":"FRENCH","target":"ENGLISH","wordKeys":[],"name":"Test","creation":"Aug 11, 2015 8:43:02 PM","modification":"Aug 11, 2015 8:43:02 PM","permissionRef":{"key":{"raw":{"kind":"Permission","id":6737807255011328}}},"lastVersion":true}

附加信息:我想要记录的所有 Java 对象 实现 java.io.Serializable

【讨论】:

  • Jackson 不会自动管理反向引用。在您尝试序列化的对象图中某处有一个循环引用链,因此杰克逊陷入了无限循环。我猜是双向父 子关系。请参阅此解决方案...wiki.fasterxml.com/JacksonFeatureBiDirReferences
【解决方案2】:

takipi 的人们对几个 json 解析器(包括 gson 和 jackson)进行了 comparison 的性能测试。事实证明,这取决于要解析的文档类型。 Gson 处理较小的文档速度更快,而 jackson 处理大型文档的速度更快。第三种替代方法 json.simple 在大型和小型文档中提供更一致的性能。

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多