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

z2acfund  于 2023-08-08  发布在  Java
关注(0)|答案(5)|浏览(249)

在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

字符串

ao218c7q

ao218c7q1#

尝试设置JSONObject.NULL而不是null
用于显式定义无值名称的标记值。与null不同,具有此值的名称:

  • 显示在names()数组中
  • 在keys()迭代器中显示
  • return true for has(String)
  • get(String)时不抛出
  • 包含在编码的JSON字符串中。

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

okxuctiv

okxuctiv2#

对于我的net.sf.json.JSONObject,我需要创建一个空的JSON

new JSONObject(true)

字符串
下面是我如何将class导入groovy的:

groovy.grape.Grape.grab(group: "org.kohsuke.stapler", module: "json-lib", version: "2.4-jenkins-2")

qpgpyjmq

qpgpyjmq3#

我创建了这个项目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

字符串

wwtsj6pe

wwtsj6pe4#

创建一个实用程序类,或者如果你已经有了一个实用程序类,就在其中创建这个实用程序方法。

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字符串,如下所示
{“key”:null }

qlckcl4x

qlckcl4x5#

这个打印

{ "key" : "null" }

字符串

相关问题