无法将空值放入 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 作为它的一个实例变量。那么是不是没有包含未初始化的值呢?

原文由 Aishwarya 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 460
2 个回答

就在 文档 的第一段中:

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

所以是的,它是 “……一些东西 null 不包括值……” (编辑:这是你原来问题的引述;你更新的问题将它更改为“未初始化的值”但是对象引用的默认值为 null ,所以…)

不过,这是该课程的“特色”; JSON 本身可以理解 null 就好了。在文档的更下方,它说您使用“重要值” NULL 来表示 null 。这看起来……很奇怪。有一个关于它的注释:

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

所以:

 params.put(KEY_TOKEN, token == null ? JSONObject.NULL : token);

原文由 T.J. Crowder 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

问题是 JSON null 是 Javascript null 值的表示。相比之下,Java 版本的 null (根据专家的说法)与 Javascript 的 undefined 值更接近。

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

原文由 Stephen C 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题