杰克逊/ JSON有什么不好的用例?

时间:2011-08-17 14:27:55

标签: java json serialization jackson

什么特征或气味表明将Jackson / JSON用于特定任务或任务集是一个糟糕想法?我还在学习这项技术,而且我不想因为碰巧有一把花哨的新锤子而陷入对待所有东西的陷阱。

例如,如果我的对象往往有很多不是基本类型的字段(基本类型我的意思是String或Double),那是否表明Jackson / JSON不适合序列化和反序列化?我不想过分地谈论这个例子,但这应该让人感觉到我想知道的事情。

3 个答案:

答案 0 :(得分:1)

如果您需要传输数据,则需要选择一种格式。 Json和其他任何人一样好;它灵活而简单。 Xml也是一种可能性,也是一种自定义格式(虽然当有许多好的标准时我不会使用自定义格式)。

杰森是个不错的选择。所有常见语言中都有大量的json解析器/编写器,甚至是大多数深奥的语言。具有复杂类型不是问题,因为您总是可以执行类似

的操作
{
  "complexValue": {
    "part1": "foo",
    "part2": "bar"
    ...
  }
}

编辑 - 来自评论:有时最好的工具就是你所知道的。如果您不传输数据,则对象序列化是可以的。它也可以传输数据,除非你想与非Java服务交谈

答案 1 :(得分:0)

我知道你曾要求使用Java,但网络上有一种常见的气味:

  • 当您已经拥有用于构建HTML的服务器代码/视图时,使用JSON将对象发送到客户端并在JavaScript中构建HTML。

这为您提供了两组维护代码。

答案 2 :(得分:0)

这是一个有点广泛的问题,分成两部分可能是有意义的(使用JSON作为格式,Jackson作为lib)。但无论哪种方式,我都不认为复杂的对象存在问题:Jackson设计用于处理复杂的对象结构和类型(包括泛型类型)。对于更复杂的对象,数据绑定的好处(方便,编写的代码非常少)也更加明显。 Jackson还支持其他JSON操作方法(流式传输,基于树),但我认为您的问题与自动数据绑定最相关。

使用自动数据绑定的常见挑战是它可以在外部数据格式(在JSON中)和对象模型之间添加紧密耦合。意味着一方面的变化往往需要另一方的协调变革。在两者之间添加层(例如手动处理数据绑定)可能有所帮助,但更多的工作。 这不是JSON独有的(与像JAXB一样的libs的XML数据绑定也有类似的挑战),甚至数据格式:Hibernate和其他ORM库也可以添加更多的紧密耦合。 另一个潜在的挑战是失去对正在发生的事情的可见性:数据绑定通常是一个黑盒子,当事情有效时,这很好(担心的事情较少),但是当他们没有解决问题时可能会更困难。