0

次のパラメーターを構成できるjsonリクエストがありますが、最初はパラメーターのタイプがわかりませんでした。次のようになります。

"メッセージ":"1つのメッセージ"

また

"message":{"part_one": "メッセージの最初の部分"、 "part_two":"メッセージの2番目の部分"}

このフィールドを文字列に解析しようとしています

String message;

およびカスタムメッセージオブジェクトへ

Message message; 

class Message{
String part_one;
String part_two;
}

また、リスト、マップなどを使用しようとしていますが、タイプが一致しない場合に解析エラーが発生します。

fromJson()関数(gsonライブラリ)の解析出力オブジェクトを作成するにはどうすればよいですか?助けてください。

4

2 に答える 2

2

GSONは、この些細な例についてはかなり詳細ですが、この方法を追求したい 場合は、広範なGSONユーザーガイドがあります。

簡単な答えは、 AndroidSDKに組み込まれているJSONObjectクラスを使用することです。役立つはずの完全なJSONチュートリアルがあります。

単に:

JSONObject myObject = new JSONObject(myResponseString);

次に、関数または応答オブジェクトコンストラクターで使用してコードベースを単純化できるオブジェクトからデータを抽出するための関数がいくつかあります。

オブジェクトの配列がある場合は、JSONArrayを使用します

最も重要なのは、http://developer.android.comのドキュメントを読むことです。

UDPATE

optJSONObjectメソッドを使用して、「メッセージ」値が単純な文字列ではなくオブジェクトであるかどうかを検出できます。

サンプルクラスを使用するには、メッセージクラスにメソッドを追加します。

public static Message fromJson(string jsonString) throws JSONException
{

    JSONOBject jsonObject = new JSONObject(jsonString);

    Message message = new Message(); //create our return object

    JsonObject messageObject = jsonObject.optJSONObject("message");

    if(messageObject!=null)
    {
        //get our member variables from the messageObject
        message.part_one = messageObject.getString("part_one");
        message.part_two = messageObject.getString("part_two");
    }
    else
    {   // it's a simple string so just get the string from jsonObject
        message.part_one = jsonObject.getString("message");
    }
    return message;
}

もちろん、例外処理を追加し、カスタム例外をスローするか、解析が失敗した場合はnullを返す必要があります。

于 2012-06-20T12:16:22.663 に答える