【问题标题】:Java to JSON Conversion: JSTL vs Methodical (Jackson/Gson)Java 到 JSON 的转换:JSTL vs Methodical (Jackson/Gson)
【发布时间】:2012-09-11 04:24:04
【问题描述】:

我是一名熟悉 Java 的前端开发人员。使用有条不紊的转换与 JSTL 将 Java 对象转换为 JSON 时,我很难提高性能和开发的优缺点。

我知道,通过有条不紊的转换,可以使用额外的 getter/setter 类来保证安全性 - 而且我有一种非常强烈的预感,即它的速度更快,资源消耗更少,但我找不到任何证明。我只能找到 JSON 库之间的比较。

我需要详细说明的原因:

  • 更严格的安全性 - 通过我们控制 JSP 中显示的数据来应对
  • 速度更快,开销更少 - 因缺乏证据而反击
  • 更容易标准化 - 缺乏灵活性来应对

以下是我遇到的一些链接(如下)——我真的在寻找一些可靠的研究,而不是比较库。另外,如果有人可以向我展示一些 Jackson 提供的 OJM 映射的可靠示例,那就太棒了。

再一次,我知道这太笼统了 - 但我只是在寻找建议和提出的理由,说明有条不紊比使用 JSTL 更好。

【问题讨论】:

标签: java json jstl jackson gson


【解决方案1】:

就性能而言,Jackson 是常用的快速库,根据大多数公共测量,例如JVM Serializers 基准。您可以轻松地自行测试,或通过 Google 进行测试(Android、Java SE 存在基准)。

Jackson OJM 很简单。给定对象'ob':

MyObject ob = ...;
ObjectMapper mapper = new ObjectMapper(); // always reuse these, expensive to create
OutputStream out = context.getResponseStream(); // or whateveer

// and then write it out
mapper.writeValue(out, ob);
// or read in:
MyObject ob2 = mapper.readValue(context.getRequestStream(), MyObject.class);

复杂性主要来自Maps、Lists(使用TypeReference)的Java泛型处理;非标准命名约定(使用注解为 Java 属性名称定义 JSON 名称)等。

有教程,例如:

大多数主要的 Java 框架正在使用或将使用 Jackson 进行 JSON 转换:所有 JAX-RS 实现(Jersey、RESTeasy、CXF)、Restlet (2.0)、Play (2.0)、SpringMVC。由于效率和可扩展性,它已经成为事实上的标准库,后者对于框架来说是最重要的。 基于 Jackson 的 JSON 处理也被发现可以与“更快”的二进制格式竞争(这意味着在大多数 Web 服务案例中切换到使用 Thrift、Avro 或 Protobuf 几乎没有什么好处)。

在替代方案中,GSON 也被广泛使用,并且与 Jackson 一样易于用于数据绑定。

【讨论】:

  • 我非常感谢您的回复 - 我想我期待更复杂的映射定义并且正在寻找更复杂但不存在的东西。所以“OJM”只是自动化的 getter 和 setter?
  • 那是起点,在最佳情况下,是的,事情只是匹配。这是 JSON 的美妙之处,因为它的信息模型基于对象(而不是关系模型 (SQL) 或层次结构 (XML)),它应该以非常简单的方式映射。在某些方面还有很多——比如多态类型;或保留对象身份;或者如何支持不可变类型(自定义构造函数)——但是你可以很容易地开始。
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-29
相关资源
最近更新 更多