Java 无法在JSON对象中放入空值
我试图使用JSON将参数传递给apiJava 无法在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的值
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
:标准Javanull
引用和哨兵值null
。特别是,调用put(name,null)
会从对象中删除命名条目,但put(name,JSONObject.null)
会存储值为JSONObject.null的条目
因此:
Json本身为空,但JSONOBJECT类不为空。因此,您不能这样做。也可以尝试使用jackson/gson进行json和对象映射。如果你需要帮助,请告诉我 根据,JSON将null
符号视为有效值
关键是JSONnull
是Javascriptnull
值的表示。相比之下,Java版本的null
与Javascript的undefined
值更为一致(根据专家的说法)
org.json
库的原始作者决定JSONObject
应该以与Javascript语义一致的方式处理jsonnull
。因此,它(在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}