Json解析多个对象 [英] Json Parsing through multiple object
问题描述
我有一个json文件名:test.json
{books:{name:XXXXX ISBN:98892}}
{书:{ 名: YYYYY, ISBN:64728}}
{书:{ 名: ZZZZZ, ISBN :19837}}
这是我的bean类
class Books {
private String name;
private int isbn;
// getter和setter方法
我的主类
Gson gson = new Gson();
try {
BufferedReader br = new BufferedReader(new FileReader(C:\\test.json));
书籍m = gson.fromJson(br,Books.class);
System.out.printf(%s,m.getName());
System.out.printf(\t%d,m.getIsbn());
我只能打印第一行,如果必须解析其他行,我该怎么办?
test.json中的JSON格式错误。它不应该能够解析它,因为它是。名称应该是字符串,所以数据应该如下所示:
{books:{name:XXXXX ISBN:98892}}
{ 书:{ 名: YYYYY, ISBN:64728}}
{ 书:{ 名: ZZZZZ ,isbn:19837}}
但它仍然是一个好奇的数据结构。它是你自己的格式,还是你得到的东西?看起来好像它可能想成为一个数组,例如:
{books:[{name: XXXXX,isbn:98892},
{name:YYYYY,isbn:64728},
{name:ZZZZZ,isbn:19837}如果是这样,你可以使用Gson解析整个文件,给定你的书
类,如下所示:
Books booksArray [];
booksArray = Gson.fromGson(br,Books []。class);
否则,考虑到数据结构与您的问题一样 - 假设 book
属性名称被引用 - 您需要考虑额外的对象级别,例如:
class BooksWrapper
{
私人图书书籍;
public Books getBooks()
{
返还书籍;
$ / code>
你可以循环 BufferedReader
并收集所有对象,如下所示:
ArrayList< Books> books = new ArrayList< Books>();
BufferedReader br = new BufferedReader(new FileReader(test.json));
字符串行;
BooksWrapper包装; $(b
)((line =
books.add(wrapper.getBooks());
(Books book:books)
{
System.out.print(book.getName());
System.out.println(\t+ book.getIsbn());
}
I have a json in a file name: test.json
{books:{"name":"XXXXX","isbn":98892}}
{books:{"name":"YYYYY","isbn":64728}}
{books:{"name":"ZZZZZ","isbn":19837}}
this is my bean class
class Books{
private String name;
private int isbn;
//getter and setter methods
my main class
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());
I am able to print only the first line, if I have to parse other line what should I do ?
解决方案 The JSON in your test.json is malformed. It gson shouldn't be able to parse it as it is. Names should be strings, so the data should look like this:
{"books":{"name":"XXXXX","isbn":98892}}
{"books":{"name":"YYYYY","isbn":64728}}
{"books":{"name":"ZZZZZ","isbn":19837}}
But it's a curious data structure anyway. Is it your own format, or something that you've been given? It seems as if it may want to be an array, such as:
{"books":[{"name":"XXXXX","isbn":98892},
{"name":"YYYYY","isbn":64728},
{"name":"ZZZZZ","isbn":19837}]}
If so, you could parse the entire file using Gson, given your Books
class, like this:
Books booksArray[];
booksArray = Gson.fromGson(br, Books[].class);
Otherwise, given the data structure as it is in your question - assuming that the books
attribute names are quoted - you'll need to account for the additional level of object, for example:
class BooksWrapper
{
private Books books;
public Books getBooks()
{
return books;
}
}
And you can loop over the lines in your BufferedReader
and collect all the objects like so:
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());
}
这篇关于Json解析多个对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!