0

我有一个使用 Google 帐户进行身份验证的应用程序。作为对我的请求的响应,Google 发送以下 JSON

{ "id": "ID", "name": "NAME", "given_name": "GiVEN NAME", "family_name": "FAMILY_NAME", "link": "https://plus.google.com/ID", "picture": "https://PHOTO.jpg", "gender": "GENDER", "locale": "LOCALE" }

问题是许多谷歌帐户没有填写所有这些详细信息。所以在大多数情况下,JSON 看起来像

{ "id": "ID", "locale": "LOCALE" }

因此,为了获取我需要的数据,我需要检查每个 JSON 以查看是否提供了姓名、图片、性别等,如果没有,则提示用户输入这些数据项。为此,我尝试检查是否JSONObject.getString("name") 等为null。但是,应用程序没有完成 if 条件,而是跳到 JSON 异常。

因此,我需要一种将 Google 发送给我的 JSON 数据添加到带有键和值的关联数组的方法,并通过该数组检查我需要的数据是否存在而不会出现 JSON 异常。你知道任何方法吗?这样做?

对不起,我的英语不好。

4

6 回答 6

3

您可以使用JSONObject.optString(String)

if ( "".equals( jsonObject.optString("name") ) ) {
    // name is not present
}

根据 Javadoc:

公共字符串 optString(字符串名称)

如果存在,则返回按名称映射的值,必要时强制它。如果不存在这样的映射,则返回空字符串。

于 2013-08-22T11:06:10.203 回答
0

它可能很长,但是您可以将这些“JSONObject.getString("name")”中的每一个放在不同的 try catch 中,并且您可以在 catch 中定义默认值或 null。

于 2013-08-22T11:17:10.673 回答
0

我使用 GSON 进行 JSON 解析,它非常容易实现并且非常有效地解析长而复杂的响应。

于 2013-08-22T12:05:25.003 回答
0

检查 JSON 是否具有特定字段使用

jsonObject.has("NAME")

如果它返回true ,则只需通过 jsonObject.getString("NAME") 添加此字段,当它返回false时提示添加此字段。

也许使用Gson库?它使用反射将 JSON 转换为 java 类。您不需要检查 JSON 是否包含特定字段。

于 2013-08-22T11:05:31.920 回答
0

您可以使用以下方法检查:

if(JSONObject.has("name"))
{

}
else
{

}
于 2013-08-22T11:04:47.003 回答
0

在 stack-over flow 中查看答案: JSON to multidimentional array in android/java

希望对你有帮助

于 2013-08-22T11:02:47.697 回答