JSON jsonObject.optString()返回字符串“ null”

我正在开发一个使用JSON进行服务器通信的Android应用,当我尝试解析json文件时遇到了一个奇怪的问题。

这是我来自服务器的json

{

"street2": null,

"province": null,

"street1": null,

"postalCode": null,

"country": null,

"city": null

}

我通过调用String city = address.optString("city", "")地址Json-object

获得City的价值。对于这种情况,我期望city为空(这是optString的意思吗?),但实际上它包含字符串“

null”。因此,进一步的null或isEmpty-

checks将返回false,因为String包含文本。如果我调用address.isNull("city")它返回true,那是正确的。仅optString失败。

对于此问题,我在Google或Stackoverflow上找不到任何内容。我真的不了解它会如何发生,因为我认为optString会完全符合我的预期。有人知道这是怎么回事吗?

回答:

您并非一个人遇到这个问题并挠头,想着“他们真的是这个意思吗?” 根据AOSP的问题,Google工程师 _ _

,但他们必须与org.json实现兼容,甚至与bug兼容。

如果您考虑一下,这是有道理的,因为如果在其他Java环境中运行的使用相同库的相同代码在Android中的行为有所不同,则在使用第三方库时将存在主要的兼容性问题。即使意图很好并且确实修复了错误,它也会打开全新的蠕虫病毒罐。

根据AOSP问题:

行为是故意的;我们竭尽全力与org.json兼容。现在已经解决了,目前尚不清楚我们是否也应该修复代码。应用程序可能已经依赖于这种错误行为。

如果这使您感到悲伤,我建议您使用另一种机制来测试null,例如json.isNull(),以解决此问题。

这是一种可以帮助您的简单方法:

/** Return the value mapped by the given key, or {@code null} if not present or null. */

public static String optString(JSONObject json, String key)

{

// http://code.google.com/p/android/issues/detail?id=13830

if (json.isNull(key))

return null;

else

return json.optString(key, null);

}

以上是 JSON jsonObject.optString()返回字符串“ null” 的全部内容, 来源链接: utcz.com/qa/421052.html

回到顶部