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

时间:2012-11-28 20:24:38

标签: java json

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

3 个答案:

答案 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