1

JSONオブジェクトを解析するためにGsonライブラリを使用しています。特に、次のような JSON があります。

{
 "key": ["string1", "string2"]
}

特定のオブジェクトを構築せずに、単純な String[] で解析したいと思います。私はこの方法を試しました:

gson.fromJson(json, String[].class);

しかし、「BEGIN_OBJECTが必要でしたが、BEGIN_ARRAYでした」というエラーが発生しました。キーが存在するためだと思います。どのように修正すればよいですか?

4

2 に答える 2

1

keyの型を持つプロパティを持つクラスを作成し、String[]それに逆シリアル化します。

public class Thing
{
    private String[] key;

    public String[] getKey() {
        return key;
    }
}

Thing thing = gson.fromJson(json, Thing.class);
于 2013-10-25T17:59:52.580 に答える
1

tvanfossonの回答は完璧なので、何も追加するべきではありませんが、あなたが尋ねたコメントでは、Thingクラスの作成を避けることが可能です。はい、そうですが、もっと壊れやすいと思います。このコードの使用方法を説明します。

    String json = "{\"key\": [\"string1\", \"string2\"]}";
    String mJson = json.replace("{\"key\":", "").replace("}","");
    String[] strings = new Gson().fromJson(mJson, String[].class);
    System.out.println(Arrays.asList(strings));

もちろん、このコードはエラーなしで実行され、追加のクラスを避けることができますが、内部にキャリッジ リターンがあるとどうなるかを考えてみてください。置換呼び出し内で正規表現を使用しない限り、壊れます。この時点で、正しい正規表現を考える代わりにクラスを追加し、Gson にすべての作業を任せることを好みます。

私はこれをコメントとしてではなく応答として追加して、自分自身を説明するのに十分なスペースを確保しましたが、この答えは正しい応答としてではなく、使用するのに不十分なハックとして使用する必要があります。Gson がどのように推論するかをもう少し理解することは有益です。

于 2013-10-25T21:00:25.547 に答える