简体   繁体   中英

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

Let's say that's my JSON structure.

{
"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
}

}

Here is my Book class.

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

That's Pager class.

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

That's what I made because I thought I need a class for parse JSON. (Not sure is that really needed or not)

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

After execute, it works for pager perfectly.

传呼机很好

But ArrayList's object's individual fields are all null even though the size is 2 as JSON. Why?

在此处输入图片说明

Use this

public class BookWrapper {
     Book book;
}

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

OR reformat the 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
    }

}

First of all your json is not valid, to check your json pls go to this link jsonlint.com and to make POJO classes of your json visit this link http://www.jsonschema2pojo.org/

and your valid json should be

{
    "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
    }
}

it should work after this!!

Try this -

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);
    }
}

Result

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]]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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