繁体   English   中英

如何将JSONArray解析为ArrayList <Object> 从JSONObject,使用GSON库?

[英]How to parse JSONArray to ArrayList<Object> from JSONObject , using GSON lib?

假设这是我的JSON结构。

{
"books": [
    {
        "book": {
            "description": "Drama",
            "date_of_released": "02 September 2015",
            "view_node": "read more >"
        }
    },
    {
        "book": {
            "description": "Horror",
            "date_of_released": "02 September 2015",
            "view_node": "read more >"
        }
    }
],
"pager": {
    "pages": 1,
    "page": 0,
    "count": 2,
    "limit": 2
}

}

这是我的上课课。

public class Book {
    String description;
    String date_of_released;
    String view_node;
}

那是传呼机类。

public class Pager {
    int pages;
    int page;
    int count;
    int limit;
}

那是我做的,因为我认为我需要一个用于解析JSON的类。 (不确定是否确实需要)

public class BookInfo {
    ArrayList<Book> books;
    Pager pager;
}

执行后,它完美地适用于寻呼机。

传呼机很好

但是,即使JSON的大小为2,ArrayList对象的各个字段也都为null 为什么?

在此处输入图片说明

用这个

public class BookWrapper {
     Book book;
}

public class BookInfo {
    ArrayList<BookWrapper> books;
    Pager pager;
}

或重新格式化json

{

    "books": [
        {

                "description": "Drama",
                "date_of_released": "02 September 2015",
                "view_node": "read more >"

        },
        {

                "description": "Horror",
                "date_of_released": "02 September 2015",
                "view_node": "read more >"

        }
    ],
    "pager": {
        "pages": 1,
        "page": 0,
        "count": 2,
        "limit": 2
    }

}

首先,您的json无效,要检查您的json请转到此链接jsonlint.com并使json的POJO类访问此链接http://www.jsonschema2pojo.org/

并且您的有效json应该是

{
    "books": [
        {
            "book": {
                "description": "Drama",
                "date_of_released": "02 September 2015",
                "view_node": "read more >"
            }
        },
        {
            "book": {
                "description": "Horror",
                "date_of_released": "02 September 2015",
                "view_node": "read more >"
            }
        }
    ],
    "pager": {
        "pages": 1,
        "page": 0,
        "count": 2,
        "limit": 2
    }
}

它应该在这之后工作!

尝试这个 -

InnerBook.java

public class InnerBook {
    private String description;
    private String date_of_released;
    private String view_node;
    public String getDescription() {
        return description;
    }
    public void setDescription(String description) {
        this.description = description;
    }
    public String getDate_of_released() {
        return date_of_released;
    }
    public void setDate_of_released(String date_of_released) {
        this.date_of_released = date_of_released;
    }
    public String getView_node() {
        return view_node;
    }
    public void setView_node(String view_node) {
        this.view_node = view_node;
    }
    @Override
    public String toString() {
        return "InnerBook [description=" + description + ", date_of_released="
                + date_of_released + ", view_node=" + view_node + "]";
    }
}

Book.java

public class Book {
    private InnerBook book;

    public InnerBook getBook() {
        return book;
    }

    public void setBook(InnerBook book) {
        this.book = book;
    }

    @Override
    public String toString() {
        return "Book [book=" + book + "]";
    }
}

Pager.java

public class Pager {
    private Long pages;
    private Long page;
    private Long count;
    private Long limit;
    public Long getPages() {
        return pages;
    }
    public void setPages(Long pages) {
        this.pages = pages;
    }
    public Long getPage() {
        return page;
    }
    public void setPage(Long page) {
        this.page = page;
    }
    public Long getCount() {
        return count;
    }
    public void setCount(Long count) {
        this.count = count;
    }
    public Long getLimit() {
        return limit;
    }
    public void setLimit(Long limit) {
        this.limit = limit;
    }
    @Override
    public String toString() {
        return "Pager [pages=" + pages + ", page=" + page + ", count=" + count
                + ", limit=" + limit + "]";
    }

}

Holder.java

import java.util.List;

public class Holder {
    private List<Book> books;
    private Pager pager;
    public List<Book> getBooks() {
        return books;
    }
    public void setBooks(List<Book> books) {
        this.books = books;
    }
    public Pager getPager() {
        return pager;
    }
    public void setPager(Pager pager) {
        this.pager = pager;
    }
    @Override
    public String toString() {
        return "Holder [books=" + books + ", pager=" + pager + "]";
    }

}

Main.java

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.testgson.beans.Holder;

public class Main {
    private static Gson gson;

    static {
        gson = new GsonBuilder().create();
    }

    public static void main(String[] args) {
        String j = "{\"books\":[{\"book\":{\"description\":\"Drama\",\"date_of_released\":\"02 September 2015\",\"view_node\":\"read more >\"}},{\"book\":{\"description\":\"Horror\",\"date_of_released\":\"02 September 2015\",\"view_node\":\"read more >\"}}],\"pager\":{\"pages\":1,\"page\":0,\"count\":2,\"limit\":2}}";
        Holder r = gson.fromJson(j, Holder.class);
        System.out.println(r);
    }
}

结果

Holder [books=[Book [book=InnerBook [description=Drama, date_of_released=02 September 2015, view_node=read more >]], Book [book=InnerBook [description=Horror, date_of_released=02 September 2015, view_node=read more >]]], pager=Pager [pages=1, page=0, count=2, limit=2]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM