3

一般的な値を含む JSON があります。マップを使用して試しましたが、結果が得られませんでした。私の問題は、汎用タグが第 2 レベルから始まることです。これは、gson を介して解析しようとしている JSON です。

{
"success": true,
"status": 200,
"events": {
    "Sep 2013": [
        {
            "artist_id": 1,
            "created_at": "2013-05-18T15:21:00Z",
            "duration": 2,
            "end_time": "2013-09-19T22:00:00Z",
            "event_desc": "",
            "event_facebook_link": "",
            "event_link": "https://www.smtickets.com/marketing/view/1316",
            "feature_small": false,
            "featured_status": false,
            "id": 90,

この JSON タグでは、"events" の後の部分が一般的です。つまり、"Sep 2013" です。

私が今試しているのは:

public Event event ;

public class Event {

    public ArrayList<Map<String, String>> dates;    

}

そして、私はそれにアクセスしています:

obj = gson.fromJson(reader, AllShowsActivityData.class);

日付のクラスを作成する方法を教えてください。したがって、Gson はそれをシリアル化できます。または、最初のレベルのタグを反復する他の方法はありますか?次に、次のように宣言できます

Type fooType = new TypeToken<Foo<Bar>>() {}.getType();

gson.toJson(foo, fooType);

4

1 に答える 1

3

確かに a を使用できMapますが、正しく使用していません。あなたが持っているのはフィールドであることに注意してください"events"。これは、いくつかのペアstringとオブジェクトを含むarrayオブジェクトです。

{ "events": { "Sep 2013": [ {}, {}, ... ], ... } }

JSON を解析するには、次のようなクラス構造が必要です (疑似コード):

class AllShowsActivityData
  Map<String, List<Event>> events

class Event
  int artist_id
  String created_at //parsing as String to simplify...
  int duration
  ...

そして、解析するコード:

AllShowsActivityData obj = gson.fromJson(reader, AllShowsActivityData.class);

最後に、日付にアクセスしたい場合は、すべての日付が次の場所にあります。

Set<String> dates = obj.getEvents().keySet(); //"Sep 2013", ...

注: 実際、これらの日付のみが必要な場合は、クラスも必要なく、単に...Eventを使用できます。Map<String, List<Object>> events

于 2013-05-29T15:31:21.200 に答える