75

如何在 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
4

4 回答 4

170

尝试设置JSONObject.NULL而不是null

用于显式定义没有值的名称的标记值。与 null 不同,具有此值的名称:

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

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

于 2012-11-28T20:27:16.960 回答
0

对我来说net.sf.json.JSONObject我需要JSON通过

new JSONObject(true)

这就是我进入 groovy 的方式:

groovy.grape.Grape.grab(group: "org.kohsuke.stapler", module: "json-lib", version: "2.4-jenkins-2")
于 2018-06-21T16:58:34.553 回答
0

我创建了这个项目https://github.com/leonardofel/JSON-java-put-null-fix

要更改(或修复),只需将库导入您的 pom.xml

这就是您的代码的行为方式:

JSONObject o = new JSONObject();
o.put("key", null);
o.isNull("key"); // returns true
o.has("key"); // returns true
o.isNull("somethingIHaventSetAtAll"); // returns true
o.get("key"); // returns null

o.remove("key");
o.isNull("key"); // returns true
o.has("key"); // returns false
o.isNull("somethingIHaventSetAtAll"); // returns true
o.get("key"); // throws JSONException "key" not found
于 2021-01-22T12:04:07.853 回答
0

创建一个实用程序类,或者如果您已经有一个现有的,只需在其中创建此实用程序方法。

 class JsonObjectUtility{
           public static Object getJSONObjectValue(Object value)  {
              return value == null ? "null" : value;
           }
 }

然后通过此实用程序传递所有输入,然后将其传递给 JSONObject put 方法,如下所示:(我将使用问题中的代码示例)

JSONObject o = new JSONObject();
o.put("key", JsonObjectUtility.getJSONObjectValue(null) );

这将打印一个 json 字符串,如下所示

{“键”:空}

于 2022-02-13T14:34:54.220 回答