3

これは私のJSONデータです:

   [
        {
        "page": 0,
        "threads": [
            {
                "no": 498507562,
                "last_modified": 1375984181
            },
            {
                "no": 498503346,
                "last_modified": 1375984243
            },
            {
                "no": 498497523,
                "last_modified": 1375984241
            },
            {
                "no": 498496579,
                "last_modified": 1375984241
            },
            {
                "no": 498499114,
                "last_modified": 1375984240
            },
            {
                "no": 498503169,
                "last_modified": 1375984239
            },
            {
                "no": 498497038,
                "last_modified": 1375984239
            },
            {
                "no": 498501946,
                "last_modified": 1375984238
            },
            {
                "no": 498507181,
                "last_modified": 1375984237
            },
            {
                "no": 498505625,
                "last_modified": 1375984236
            },
            {
                "no": 498505578,
                "last_modified": 1375984242
            },
            {
                "no": 498507346,
                "last_modified": 1375984236
            },
            {
                "no": 498497504,
                "last_modified": 1375984236
            },
            {
                "no": 498486742,
                "last_modified": 1375984234
            },
            {
                "no": 498502590,
                "last_modified": 1375984232
            }
        ]
    },
    {
        "page": 1,
        "threads": [
            {(...so on)

これは、逆シリアル化のための私のコードです:

Gson gson = new Gson();
JSONArray pageJson = JsonReader.readJsonArrayFromUrl(
    "https://api.4chan.org/b/threads.json");
System.out.println(pageJson.toString());

PageResponse PageResponse = gson.fromJson(pageJson.toString(), PageResponse.class);

PageResponse でエラーが発生します。これが私の PageResponce クラスです。情報を正しく扱っているのではないかと思います。私は JsonObjects のみを扱ってきました。「ページ」を取得する方法を知りたい: 0、次に「スレッド」を取得する方法

public class PageResponse {

List<Page> pages;

public List<Page> getPages() {
    return pages;
}

}

マイページクラス

公開クラス ページ {

int page;

public int getPage() {
    return page;
}

}

4

1 に答える 1

4

最初に配列からオブジェクトを取り出すために使用JSONArray#getJSONObject()します。Page

Page page = gson.fromJson(pageJson.getJSONObject(0).toString(), Page.class);
System.out.println(page.getPage()); // 0

すべてのページを逆シリアル化するには

Page[] pages = gson.fromJson(pageJson.toString(), Page[].class);
System.out.println("Total: " + pages.length); // 2
System.out.println("pages[0] = " + pages[0].getPage()); // pages[0] = 0

または、JSON 文字列にの追加セットを追加して、{}囲んでいるオブジェクトと照合しPageResponseます。これで、上で逆シリアル化されたオブジェクトと一致List<Page>するようになります。Page[]

PageResponse pageResp = gson.fromJson("{ pages : " + pageJson.toString() + " }",
                                                              PageResponse.class);
System.out.println(pageResp.getPages().get(1).getPage()); // 1

Pageさて、クラスを拡張する場合Threads

class Page {
    private int page;
    private List<Threads> threads;

    public int getPage() {
        return page;
    }

    public List<Threads> getThreads() {
        return threads;
    }
}

class Threads {
    private long no;
    private String last_modified;

    public long getNo() {
        return no;
    }

    public String getLastModified() {
        return last_modified;
    }
}

JSON 全体が正常に逆シリアル化されます。

System.out.println(pageResp.getPages().get(0).getThreads().size()); // 15

System.out.println(pageResp.getPages().get(0)
                           .getThreads().get(0).getNo()); // 498507562
System.out.println(pageResp.getPages().get(0)
                           .getThreads().get(0).getLastModified()); // 1375984181
于 2013-08-08T18:40:53.953 に答える