0

Gsonライブラリを使用してjson データを解析しようとしています。サーバーからの応答は、次のいずれかになります。

成功結果:

{myObject: {foo:"1", bar:"bleh"}}

故障結果:

{error: {message:"invalid token", code:320} }

Gson は、次のような単一の戻り値の型しか処理できないようです。

Gson gson = new Gson();
MyObject object = gson.fromJson(value, MyObject.class);

JSON を自分で解析するだけでなく、Gson を使用してフィードから data/(error) を適切に解析するにはどうすればよいですか?

4

2 に答える 2

2

何を取得するかわからないため、Gson などを使用して POJO に逆シリアル化するのは非常に困難です。実際には、「myObject」または「error」フィールドを持つオブジェクトを取得しています。1 つのアプローチは、単純に包括的なオブジェクトを作成することです。Gson は、JSON を解析するときに存在しないフィールドを設定するnullため、次のようなものがうまく機能します。

class JSONResponse {
    private MyObject myObject;
    private Error error;

    static class MyObject {
        String foo;
        String bar;
    }

    static class Error {
        String message;
        int code;
    }

    public boolean isError() {
        return error != null;
    }

    // Getters that access the fields of the objects
    // ...
}
于 2013-02-27T22:53:36.663 に答える
0

@Brianに感謝します。私はこのように構文解析することになりました

JsonParser parser = new JsonParser();
    parser.parse(value).getAsJsonObject();

次に、サーバー例外をスローできるように、エラーノードが存在するかどうかを確認します。ノードが存在しない場合は、そこからGsonを使用しました。

Gson gson = new GsonBuilder().create();
    ArrayList<GridItemVo> list = gson.fromJson(value, new TypeToken<ArrayList<GridItemVo>>(){}.getType());
于 2013-02-27T23:29:53.857 に答える