【问题标题】:Why am I getting a null object when creating a JSONObject from string?从字符串创建 JSONObject 时,为什么我得到一个空对象?
【发布时间】:2018-05-04 09:36:28
【问题描述】:

我为一个从字符串创建 JSONObject 的 Android Studio (3.0.1) 项目编写了一个 Java 方法。现在我编写了一个 JUnit 测试来测试 JSON 对象是否正确。

问题总是 JSONObject 为 NULL。

例如,我尝试运行以下代码:

String response = "{\"songs\":\"title\"}";
System.out.println(response);
JSONObject submitPlaylistResponse = new JSONObject(response);
System.out.println(submitPlaylistResponse.toString());

输出是:

{"songs":"title"}
null

为什么我的 JsonObject 仍然为空?我错过了什么?我觉得我错过了一些琐碎/简单的事情。

【问题讨论】:

  • 如果替换 JSONObject submitPlaylistResponse = new JSONObject(response);使用 JSONObject submitPlaylistResponse = new JSONObject("{\"songs\":\"title\"}");你得到了什么?
  • 您对 JSONObject 的导入是什么
  • 试试这个System.out.println(submitPlaylistResponse.getString("songs"));
  • @android_Muncher:同样的事情 - 空对象。导入是 import org.json.*;
  • @G.Dator:发生同样的问题。

标签: java android json


【解决方案1】:

可能您使用了错误的库。检查您的导入。应该是这样的。 org.json.JSONObject; 我检查了你的代码,它在我的 android studio 2.3 上运行

【讨论】:

    【解决方案2】:

    查看JSONObjectcode后发现:

    public String toString() {
       return "null";
    }
    

    如您所见,方法总是返回“null”字符串而不是 null 对象。 在这种情况下,如果任务是检查 JSONObject 的正确性,您可以按照 @G.Dator 的回答或使用 String toString (int indentSpaces)

    See 也是。

    【讨论】:

    • 看起来toString(int indentFactor) 也坏了。当它在以前的版本中工作时,世界上怎么会有人引入这样的错误?!我猜人们会重写课程。这就是我将第 3 方库保持在最低限度的原因(尽管 org.json 是我迄今为止最信任的库)。
    【解决方案3】:

    将下面一行添加到 build.gradle 依赖项

    testImplementation 'org.json:json:20190722'
    

    更多详情请参考this question

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2021-06-01
      • 2015-10-14
      • 1970-01-01
      • 2017-11-22
      相关资源
      最近更新 更多