如何在Java中使用org.json.JSONObject将值设置为null?


71

如何在Java中使用org.json.JSONObject将值设置为null?我肯定可以通过使用isNull来读取值是否为null,但是当我将其设置为null时,它只会忽略我:

JSONObject o = new JSONObject();
o.put("key",null);
o.isNull("key"); // returns true, buuuut...
o.has("key");    // returns false
o.isNull("somethingIHaventSetAtAll");    // also returns true, unfortunately

8
如果输入null,则它将删除密钥:json.org/javadoc/org/json/…–
Martin Wilson,

Answers:


162

尝试设置JSONObject.NULL而不是null

用于明确定义没有值的名称的哨兵值。与null不同,具有以下值的名称:

  • 显示在names()数组中
  • 出现在keys()迭代器中
  • 为has(String)返回true
  • 不要抛出get(String)
  • 包含在编码的JSON字符串中。

与null相比,此值返回true违反了equals(Object)的一般协定。它的toString()方法返回“ null”。


2
奇迹般有效!谢谢!
英国电信

您能否举例说明其为何违反合同?
voipp

@voipp违反了规则(来自Object.equals):“对于任何非空引用值xx.equals(null)应返回false”
Andres F.

@rekire如何在org.json.simple.*
Kasun Siyambalapitiya中

感谢您的回答!
拉吉

0

对我来说,与net.sf.json.JSONObject我需要创建一个空JSON

new JSONObject(true)

这是我如何进入常规的方法:

groovy.grape.Grape.grab(group: "org.kohsuke.stapler", module: "json-lib", version: "2.4-jenkins-2")
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.