[英]Json Parsing through multiple object
我在文件名中有一个json:test.json
{books:{"name":"XXXXX","isbn":98892}}
{books:{"name":"YYYYY","isbn":64728}}
{books:{"name":"ZZZZZ","isbn":19837}}
这是我的bean类
class Books{
private String name;
private int isbn;
//getter and setter methods
我的主要班级
Gson gson = new Gson();
try {
BufferedReader br= new BufferedReader(new FileReader("C:\\test.json"));
Books m = gson.fromJson(br, Books.class);
System.out.printf("%s",m.getName());
System.out.printf("\t%d",m.getIsbn());
我只能打印第一行,如果我必须解析其他行,我该怎么办?
我假设您有以下json文本。
[
{books:{"name":"XXXXX","isbn":98892}},
{books:{"name":"YYYYY","isbn":64728}},
{books:{"name":"ZZZZZ","isbn":19837}}
]
您需要创建另一个包含“ books
字段的类,
class Book{
private String name;
private int isbn;
//getter - setter
}
class Books {
private Book books;
public Book getBooks() {
return books;
}
public void setBooks(Book books) {
this.books = books;
}
}
并解析json:
BufferedReader br = new BufferedReader(new FileReader("C:\\test.json"));
List<Books> books= gson.fromJson(br,new com.google
.gson
.reflect
.TypeToken<List<Books>>(){}.getType());
for(Books book:books)
{
System.out.println(book.getBooks().getIsbn()
+ " " + book.getBooks().getName());
}
您的test.json中的JSON格式错误。 gson应该无法原样解析它。 名称应为字符串,因此数据应如下所示:
{"books":{"name":"XXXXX","isbn":98892}}
{"books":{"name":"YYYYY","isbn":64728}}
{"books":{"name":"ZZZZZ","isbn":19837}}
但这还是一个奇怪的数据结构。 它是您自己的格式,还是您得到的东西? 似乎好像要成为一个数组,例如:
{"books":[{"name":"XXXXX","isbn":98892},
{"name":"YYYYY","isbn":64728},
{"name":"ZZZZZ","isbn":19837}]}
如果是这样,您可以使用给定的Books
类,使用Gson解析整个文件,如下所示:
Books booksArray[];
booksArray = Gson.fromGson(br, Books[].class);
否则,给定问题所在的数据结构-假设books
属性名称已加引号-您将需要考虑对象的附加级别,例如:
class BooksWrapper
{
private Books books;
public Books getBooks()
{
return books;
}
}
您可以在BufferedReader
循环浏览并收集所有对象,如下所示:
ArrayList<Books> books = new ArrayList<Books>();
BufferedReader br = new BufferedReader(new FileReader("test.json"));
String line;
BooksWrapper wrapper;
while ((line = br.readLine()) != null)
{
wrapper = gson.fromJson(line, BooksWrapper.class);
books.add(wrapper.getBooks());
}
for (Books book : books)
{
System.out.print(book.getName());
System.out.println("\t" + book.getIsbn());
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.