如何在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
答案 0 :(得分:150)
尝试设置JSONObject.NULL
而不是null
:
用于显式定义没有值的名称的sentinel值。与null不同,具有此值的名称为:
- 显示在names()数组
中- 显示在keys()迭代器
中- 对于has(String)
返回true- 不要抛出get(String)
- 包含在编码的JSON字符串中。
与null相比,返回true时,此值违反了equals(Object)的常规协定。它的toString()方法返回" null"。
答案 1 :(得分: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")
答案 2 :(得分: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