一尘不染

无法在JSON对象中放入空值

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的价值,{"date":"2017-06-19"}但是令牌却无处可见。我尚未初始化令牌,并且其值为null作为其实例变量。难道不包括未初始化的值吗?


阅读 352

收藏
2020-07-27

共1个答案

一尘不染

文档的第一段中:

值可能不是nullNaNs,无穷大,也不能是此处未列出的任何类型。

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

但是,这是该类的“功能”。JSON本身null就很好理解。在文档的更下方,它说您使用“信度值”
NULL来表示null。似乎…很奇怪。有一个关于它的注释:

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

所以:

params.put(KEY_TOKEN, token == null ? JSONObject.NULL : token);
2020-07-27