为什么在将字符串转换为JSONObject时,我得到了一个空对象?
为什么在将字符串转换为JSONObject时,我得到了一个空对象?
我在Android Studio(3.0.1)项目中编写了一个Java方法,用于从字符串创建一个JSONObject。现在我编写了一个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仍然为null?我漏掉了什么?我觉得我漏掉了一些琐碎/简单的东西。
问题出现的原因是在创建JSONObject对象时,从字符串中解析数据时得到了一个空对象。解决方法是在build.gradle文件的dependencies中添加以下行:testImplementation 'org.json:json:20190722'
。更多细节可以参考这个问题。
当使用字符串创建一个JSONObject对象时,为什么会得到一个null对象?在查看JSONObject的代码后,我找到了问题所在。代码中的toString方法始终返回"null"字符串而不是null对象。
在这种情况下,如果任务是检查JSONObject的正确性,你可以参考Dator的回答或者使用toString(int indentSpaces)方法。
看起来toString(int indentFactor)方法也有问题。在之前的版本中这个方法是正常工作的,为什么会出现这样的bug呢?我猜是因为有人重写了这个类。这也是为什么我尽量少使用第三方库的原因(尽管org.json是我最信任的一个库,直到现在)。