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" }

問題は、多くの Google アカウントでこれらの詳細がすべて入力されていないことです。したがって、ほとんどの場合、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に従って:

public String optString (文字列名)

存在する場合は名前でマップされた値を返し、必要に応じて強制します。そのようなマッピングが存在しない場合は、空の文字列を返します。

于 2013-08-22T11:06:10.203 に答える
0

スタック オーバー フローの回答を参照してください: Android/Java の JSON から多次元配列へ

これがあなたを助けることを願っています

于 2013-08-22T11:02:47.697 に答える
0

次を使用して確認できます。

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

}
else
{

}
于 2013-08-22T11:04:47.003 に答える
0

JSON に特定のフィールドが使用されているかどうかを確認するには

jsonObject.has("NAME")

trueが返された場合は、jsonObject.getString("NAME") によってこのフィールドを追加するだけで、falseが返されたときにこのフィールドを追加するプロンプトが表示されます。

多分Gsonライブラリを使用しますか?リフレクションを使用して、JSON を Java クラスにキャストします。JSON に特定のフィールドが含まれているかどうかを確認する必要はありません。

于 2013-08-22T11:05:31.920 に答える
0

長くなるかもしれませんが、これらの「JSONObject.getString("name")」をそれぞれ別の try catch に入れて、デフォルト値または null を catch に定義することができます。

于 2013-08-22T11:17:10.673 に答える