Json解析多个对象 [英] Json Parsing through multiple object

查看:266
本文介绍了Json解析多个对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆