我從來沒有試圖解析過JSON。我有一個JSON格式的一些書是這樣的:如何解析Java中的對象的JSON數組
{
"Search": {
"Books": [
{
"isbn": "1849830347",
"title": "American Assassin",
"author": "Vince Flynn",
"price": 7.99
},
{
"isbn": "0857208683",
"title": Kill Shot",
"author": "Vince Flynn",
"price": 5.99
},
...
}
}
我想要的是對其進行解析,並用填充圖書對象的列表結束。我曾與傑克遜和Google的GSON一起玩過。我終於得到了這個工作,但我並不滿意。這只是代碼的作用,我希望我的解決方案是未來再次使用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-使用傑克遜到反串行化的對象數組 –