Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在JSON对象中放入空值_Java_Android_Json - Fatal编程技术网

Java 无法在JSON对象中放入空值

Java 无法在JSON对象中放入空值,java,android,json,Java,Android,Json,我试图使用JSON将参数传递给api class Sample { ... String token; ... void method() { ... JSONObject params = new JSONObject(); params.put(KEY_TOKEN,token); params.put(KEY_DATE,date); Log.e("params ",params+""); ... } 我得到params的值

我试图使用JSON将参数传递给api

class Sample
{ ...
   String token;
...

void method()
{ ...
    JSONObject params = new JSONObject();
    params.put(KEY_TOKEN,token);
    params.put(KEY_DATE,date);

    Log.e("params ",params+"");


      ...  }    
我得到params的值为
{“date”:“2017-06-19”}
,但在任何地方都看不到令牌。 我尚未初始化令牌,其值作为实例变量为null。那么,是不是未初始化的值没有包括在内?

就在第一段:

值不能是
null
NaN
s、无穷大或此处未列出的任何类型

是的,它是“…不包括
null
值的内容…”(编辑:这是您原始问题中的引用;您更新的问题将其更改为“未初始化值”,但对象引用的默认值是
null
,所以…)

不过,这是那个阶层的“特色”;它本身可以很好地理解
null
。在下面的文档中,它说您使用了一个“sentinal value”,来表示
null
。这似乎很奇怪。有一个关于它的注释:

警告:此类以两种不兼容的方式表示
null
:标准Java
null
引用和哨兵值
null
。特别是,调用
put(name,null)
会从对象中删除命名条目,但
put(name,JSONObject.null)
会存储值为
JSONObject.null的条目

因此:


Json本身为空,但JSONOBJECT类不为空。因此,您不能这样做。也可以尝试使用jackson/gson进行json和对象映射。如果你需要帮助,请告诉我

根据,JSON将
null
符号视为有效值

关键是JSON
null
是Javascript
null
值的表示。相比之下,Java版本的
null
与Javascript的
undefined
值更为一致(根据专家的说法)


org.json
库的原始作者决定
JSONObject
应该以与Javascript语义一致的方式处理json
null
。因此,它(在Java中)表示为
JSONObject.NULL

我通过使用字符串表示创建空JSON值来将空值填充到对象中,从而解决了这个问题。显然是一个黑客,但它是有效的

JSONObject obj = new JSONObject("{\"keyword\": null}");
System.out.println(obj); // {"keyword": null}
我修复了这个“功能”,并创建了这个项目

使以下代码成为可能:

JSONObject j=new JSONObject().put(“myPreciousNull”,null);
System.out.println(j.toString());
印刷品:

{“myPreciousNull”:null}

您可以检查,不是吗?token=null只需询问未初始化values@aish:由于
token
的类型为
String
,并且它是实例成员,因此它具有默认值
null
,因此它是相同的。但是该字符串对象的值为null,因此它应该理解它。如果不是的话,你必须扔一个error@aish:与
JSONObject
的设计师交谈。是他们决定让它这样做的。好消息是有一种方法可以让
null
在那里,你只需要用一种非标准的方式。坦率地说,这看起来很愚蠢,但我不知道他们在使用的所有设计约束。任何值为null的东西都会从JSON中删除,因为它被理解为未设置,因此不需要。因此,它将从JSON字符串中删除,以减少网络运行期间的负载transport@BhalchandraSW:这应该是
删除
操作,而不是
放置
操作。不以正常、毫不奇怪的方式处理
null
,这很奇怪。:-)另外,jsonObject.optString(key)返回字符串“null”,而不是实际的null。我见过的最糟糕的json实现。
JSONObject obj = new JSONObject("{\"keyword\": null}");
System.out.println(obj); // {"keyword": null}