提问人:B T 提问时间:11/29/2012 更新时间:8/5/2023 访问量:75480
如何在 java 中使用 org.json.JSONObject 将值设置为 null?
How do you set a value to null with org.json.JSONObject in java?
问:
如何在 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
答:
176赞
rekire
11/29/2012
#1
尝试设置 JSONObject.NULL
而不是:null
一个哨兵值,用于显式定义没有值的名称。与 null 不同,具有此值的名称:
- 显示在 names() 数组中
- 显示在 keys() 迭代器中
- 返回 true for has(String)
- 不要抛出 get(String)
- 包含在编码的 JSON 字符串中。
与 null 相比,此值返回 true,从而违反了 equals(Object) 的一般约定。它的 toString() 方法返回 “null”。
评论
0赞
voipp
10/20/2016
您能否举例说明为什么会违反合同?
0赞
Andres F.
11/17/2016
@voipp 它违反了规则 (from) :“对于任何非 null 引用值 x,x.equals(null)
应返回 false
”。Object.equals
0赞
Kasun Siyambalapitiya
1/20/2017
@rekire如何在org.json.simple.*
0赞
Raj
8/28/2017
感谢您的回答!
0赞
akostadinov
6/22/2018
#2
对于我来说,使用 net.sf.json.JSONObject,我需要通过以下方式创建一个 nullJSON
new JSONObject(true)
这就是我如何让类进入时髦:
groovy.grape.Grape.grab(group: "org.kohsuke.stapler", module: "json-lib", version: "2.4-jenkins-2")
0赞
Leonardo Lopes
1/22/2021
#3
我创建了这个项目 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
0赞
Winter MC
2/13/2022
#4
创建一个实用程序类,或者如果您已经有一个现有的类,只需在其中创建此实用程序方法。
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 字符串,如下所示
{ “键” : null }
评论