web-dev-qa-db-ja.com

GSONを使用してJSON配列を解析する

次のようなJSONファイルがあります。

[
    {
        "number": "3",
        "title": "hello_world",
    }, {
        "number": "2",
        "title": "hello_world",
    }
]

以前はファイルにルート要素があったとき、私は使用します:

Wrapper w = gson.fromJson(JSONSTRING, Wrapper.class);

コードですが、ルート要素が配列であるため、Wrapperクラスをコーディングする方法を考えることはできません。

私は使用してみました:

Wrapper[] wrapper = gson.fromJson(jsonLine, Wrapper[].class);

で:

public class Wrapper{

    String number;
    String title;

}

しかし、運がなかった。この方法を使用して他にどのようにこれを読むことができますか?

追伸:私はこれを使用してこれを動作させました:

JsonArray entries = (JsonArray) new JsonParser().parse(jsonLine);
String title = ((JsonObject)entries.get(0)).get("title");

しかし、私は両方の方法で(可能な場合)それを行う方法を知りたいと思います。

106
Edd

問題は、each配列内のJSONオブジェクトの末尾のコンマ(各末尾の

    "title": "..",  //<- see that comma?
}

削除してデータを変更した場合

[
    {
        "number": "3",
        "title": "hello_world"
    }, {
        "number": "2",
        "title": "hello_world"
    }
]

Wrapper[] data = gson.fromJson(jElement, Wrapper[].class);は正常に動作するはずです。

106
Pshemo
Gson gson = new Gson();
Wrapper[] arr = gson.fromJson(str, Wrapper[].class);

class Wrapper{
    int number;
    String title;       
}

うまくいくようです。ただし、文字列に余分な,コンマがあります。

[
    { 
        "number" : "3",
        "title" : "hello_world"
    },
    { 
        "number" : "2",
        "title" : "hello_world"
    }
]
38
Narendra Pathai
public static <T> List<T> toList(String json, Class<T> clazz) {
    if (null == json) {
        return null;
    }
    Gson gson = new Gson();
    return gson.fromJson(json, new TypeToken<T>(){}.getType());
}

サンプル呼び出し:

List<Specifications> objects = GsonUtils.toList(products, Specifications.class);
14
chenyueling