Проблема с форматированием ввода в формате JSON с Java - PullRequest
0 голосов
/ 09 марта 2012

Привет всем, у меня проблемы с моей Java-программой. По сути, я пишу программу, которая запрашивает у пользователя название книги, автора, цену и isbn. Затем он принимает входные данные, которые хранят его, в мой класс Book, в котором хранятся входные данные, и имеет метод toString, который печатает содержимое, аналогичное форматированию JSON. Затем мой класс books использует список Array для хранения объектов Book и имеет метод toString, который распечатывает весь набор книг в формате JSON. Проблема в том, что он неправильно форматирует. Проблема заключается в моем утверждении if и else в моем коде. Вот мой код:


import java.util.ArrayList;
public class Books
{
  private ArrayList<Book> books;

  public Books()
  {
    books = new ArrayList<Book>();
  }
  public void add(Book bk)
  {
    books.add(bk);
  }
  public String toString()
  {
    String temp = "{\n ";
    temp = temp + "  \"books:\": [\n";
    int bookCount = 0;
    for (Book bk : books) {
      temp += bk.toString();
      bookCount++;//add +1 to bookcount
      if (bookCount < books.size()-1) {
        temp += ",\n";
      }
      else {
        temp += "\n  ]\n}\n";
      }
    }
    return temp;
  }
}

Когда я запускаю свою программу, она выглядит так:

Результаты

Моя цель, чтобы это выглядело так:

WantedResults

Так что после правильного разбора первой книги, добавив ", \ n"; , Но каждая книга анализируется после добавления "\ n] \ n} \ n"; который я только хочу добавить в последний. :( Пожалуйста, помогите.

Заранее спасибо

Ответы [ 3 ]

0 голосов
/ 09 марта 2012

Не делайте этого, используйте правильную библиотеку JSON для правильного анализа или создания структур данных JSON.

Вот учебник, с которого можно начать.http://java.sg/parsing-a-json-string-into-an-object-with-gson-easily/

0 голосов
/ 09 марта 2012

Использование Джексон :

...
ObjectMapper mapper = new ObjectMapper ();
mapper.writeValue (new java.io.Writer ().write (jsonifiedStr), books); 
System.out.println (jsonifiedStr);
...
0 голосов
/ 09 марта 2012

Проблема в том, что вы увеличиваете значение bookCount перед проверкой условия.

Если вы не используете расширенный цикл for, код будет выглядеть следующим образом

for (int bookCount = 0; bookCount < books.size()-1; bookCount++)  {
    Book book = books.get(i);
    //  print book
    //  check Condition
}

bookCount следует добавить после проверки условия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...