【问题标题】:JSON: java.lang.Double null is converted to zero; How should I handle in client?JSON:java.lang.Double null 转换为零;我应该如何在客户端处理?
【发布时间】:2011-07-22 12:02:11
【问题描述】:

我有一个发出 AJAX 请求的客户端。 Java 应用程序服务器创建具有 java.lang.Double 实例字段的对象列表。根据请求,其中一些实例字段可能在所有对象上为空。但是当对象列表被转换(通过 JSONArray.fromObject)时,空值被转换为零。

因此,在客户端,这些对用户显示为零值。我应该如何处理这个问题,以便用户看不到这些值?我认为最好首先阻止服务器发送零(也许不发送字段),但我不确定如何使用 JSON 干净地做到这一点。不太有利的是,我可以在客户端以某种方式了解处理程序中请求的内容,并防止显示数据,除非客户端请求。那么,有没有办法从 XMLHttpRequest 对象中获取 HTTP 请求参数数据?

非常感谢您的帮助。

【问题讨论】:

  • 您使用什么库在服务器上生成 JSON?听起来这是一个拆箱问题,其中 Double 转换为 double 并且 null 转换为 0。

标签: java javascript ajax json


【解决方案1】:

使用不同的 JSON 解析器(Crockford 是一种可能性)。将 null 设为 0 似乎是一个错误。

【讨论】:

  • 我会试试的。我目前正在使用 net.sf.json-lib(组 id)、json-lib(工件 id)和 2.3 版。我从哪里可以得到 Crockford 的解析器?谢谢。
  • github.com/douglascrockford/JSON-js(您还可以在官方 json.org 上找到指向它的链接,因为它是那里列出的仅有的两个 JS 解析器之一)
  • 很抱歉,我可能遗漏了一些东西。 Crockford 的代码似乎不是 Java 到 JSON 库。我在 JavaScript 端解析 JSON 没有问题。问题是将 Java 对象转换为 JSON。
  • 哦,我完全误解了。不过,同样的想法也可以适用(如果您访问 json.org,您会看到它们有多个 Java=>JSON 库)。但是,我阅读了您库中的 javadoc(特别是 JSONArray,json-lib.sourceforge.net/apidocs/net/sf/json/JSONArray.html),但它没有描述您所看到的行为。因此,您可能希望向他们提交错误,或使用其他 fromObject 签名(它允许您传入配置参数;我没有广泛查看该配置,但基于快速浏览,它似乎可以解决这个问题)。
  • 顺便说一句,我刚刚检查过,我们实际上在我们的应用程序中使用了相同的库,只是我们使用了一个没有 fromObject 方法的旧版本。相反,我们只使用将单个对象作为参数的 JSONObject 构造函数。不确定您的版本是否具有该构造函数,或者该构造函数和 fromObject 之间的区别是什么......但可能值得尝试构造函数,看看它是否有帮助。
猜你喜欢
  • 2019-06-03
  • 2018-06-01
  • 2013-05-30
  • 2019-09-05
  • 2019-04-30
  • 2019-06-01
  • 1970-01-01
  • 2020-11-26
相关资源
最近更新 更多