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

新手上路,请多包涵

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

原文由 B T 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.4k
2 个回答

尝试设置 JSONObject.NULL 而不是 null

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

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

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

原文由 rekire 发布,翻译遵循 CC BY-SA 4.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 字符串,如下所示

{“键”:空}

原文由 Winter MC 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题