3

サーバーから返された JSON 文字列をデコードするために GSON を使用しています。API からこの特定の JSON が返されるまでは、何の問題もありませんでした。戻り値は次の形式です。

"成功":1,"エラー":[],"データ":{"524":{"id":"524"}, "525":{"id":"525"}}

他の戻り値については、自分で作成したクラスの配列としてデータを持っていましたが、この戻り値については、それは配列ではなくオブジェクトであると言います。では、クラスをどのようにフォーマットすればよいでしょうか。

***編集: 私が問題を抱えているのは、「524」および「525」フィールドが静的な名前ではないことです。それらは、ユーザーの資格情報が何であるかに依存しています。フィールド 323、324、325、または単一のフィールド 123 が存在する可能性があります。それはすべて依存します。これを動的に処理するにはどうすればよいですか?

解決済み* 私がしなければならなかったことは<String, Object>、カスタム クラスで「データ」をハッシュマップにすることでした。次に、最初のデコードの後、「データ」を Object [] 型の配列に変換しました。次に、各 Object[i] を JSON 文字列に変換しました。その後、 gson.fromJson() を使用して、当初意図していたものに変換しました。

4

2 に答える 2

3

API が一貫性のない結果を出し、その理由が自分の側で見つからない場合、1 つのオプションは、オブジェクトを GSON に解析しJSONObject o = gson.fromJson(String)、データをリストに変換することです。o.getElement("data").isList()など。

これが完了したら、 でオブジェクトを作成できますgson.fromJson(JSONObject,Class)。別の方法として、各インスタンスに 1 つずつ、2 つのクラスを用意することもできますが、これが 2 つの異なるクラスを用意する唯一の理由である場合、これは不適切に思えます。

于 2012-08-27T20:22:03.160 に答える
1

GSONは正しいです。サーバーからの応答dataは、オブジェクトでもある 2 つのメンバーを持つオブジェクトです。配列には、中かっこではなくdata角かっこを使用する必要があります。JSON 形式の詳細については、こちらを参照してください。[]{}

サーバーのフォーマットが変更されたか、別の API バージョンを試したか、誰かがサーバー側でバグを作成しました。

于 2012-08-27T20:27:57.477 に答える