Я никогда не пытался разбирать JSON раньше. У меня есть несколько книг в формате JSON как это:Как разбирать массив объектов JSON в Java
{
"Search": {
"Books": [
{
"isbn": "1849830347",
"title": "American Assassin",
"author": "Vince Flynn",
"price": 7.99
},
{
"isbn": "0857208683",
"title": Kill Shot",
"author": "Vince Flynn",
"price": 5.99
},
...
}
}
То, что я хочу, чтобы разобрать их и в конечном итоге со списком заселенных объектов книги. Я играл с Джексоном и с GSON от Google. Я, наконец, получил это, но я не очень доволен этим. Это всего лишь код, который работает, и я хочу, чтобы мое решение было хорошим кодом, когда я снова работаю с JSON в будущем. Я полагаю, что это неэффективно, потому что я сначала превращаю его в дерево, а затем разбираю его. Может ли кто-нибудь предложить улучшения?
List<Book> books = new ArrayList<Book>();
JsonFactory f = new JsonFactory();
JsonParser jp = f.createJsonParser(json);
jp.setCodec(new ObjectMapper());
JsonNode node = jp.readValueAsTree();
JsonNode books = node.findValue("Books");
Iterator<JsonNode> it = books.getElements();
while(it.hasNext()){
JsonNode temp = it.next();
Book book = new Book();
book.setIsbn(temp.findValue("isbn").asText());
book.setTitle(temp.findValue("title").asText());
book.setAuthor(temp.findValue("author").asText());
book.setPrice(temp.findValue("price").asDouble());
books.add(book);
}
Единственная причина, у меня есть setCodec линия, потому что без него, я получаю IllegalStateException с сообщением: Нет ObjectCodec определен для синтаксического анализа, не может десериализации JSON в JsonNode дерево.
От Jackson API, я попытался использовать метод Streaming API. Но мне пришлось вызвать jp.nextToken() примерно в 10 раз, чтобы перейти к первому значению isbn, и это выглядело очень грязно. Хотя API говорит, что он на 20%/30% быстрее.
Оцените любые отзывы об этом.
Возможный дубликат: http://stackoverflow.com/questions/6349421/how- to-use-jackson-to-deserialise-a-array-of-objects –