0

Gson と Retrofit2 を使用して POJO インスタンスを取得しようとしています。

一般的な JSON 応答は次のようになります

私の問題はInfoboxフィールドにあります。場合によっては (このように)、フィールドは次の型のオブジェクトになり、それ以外の場合は空の文字列になります。

class Infobox {
    public List<Content> content = new ArrayList<>();
    public List<Metum> meta;
}

class Content {
    public String dataType;
    public String value;
    public String label;
    public Integer wikiOrder;
}

class Metum {
    public String dataType;
    public String value;
    public String label;
}

以下のように TypeAdapter を書いてみました

class InfoboxAdapter extends TypeAdapter<Infobox> {
    final Gson embedded = new Gson();

    @Override
    public void write(JsonWriter out, Infobox infobox) throws IOException {
        if (infobox == null) {
            out.nullValue();
            return;
        }
        out.beginObject();
        out.name("content");
        embedded.toJson(embedded.toJsonTree(infobox.content), out);

        out.name("meta");
        embedded.toJson(embedded.toJsonTree(infobox.meta), out);
        out.endObject();
    }

    @Override
    public Infobox read(JsonReader in) throws IOException {
        if ("".equals(in.peek())) {
            return null;
        }

        return embedded.fromJson(in, Infobox.class);
    }

しかし、それは失敗しますjava.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING

さらに紛らわしいのはmeta、オブジェクトでもある応答内のフィールドの値が null (のような空の文字列ではないinfobox)になる場合があることです。

私はGsonを他のすべてに使用しており、別の依存関係を追加したくないので、Gsonを使用してそれを実行できるようにしたいと考えています

4

2 に答える 2

0

こんにちは : http://www.jsonschema2pojo.org/にアクセスし て、コードを貼り付けてください。このサイトは、関連するすべてのクラスを自動的に作成します。

問題がある場合は、このリンクをご覧ください。

私のドライブリンク

于 2016-07-14T07:09:37.520 に答える