gpt4 book ai didi

java - 如何在 Java 中解析 JSON 对象数组

转载 作者:行者123 更新时间:2023-11-30 03:24:41 24 4
gpt4 key购买 nike

我以前从未尝试过解析 JSON。我有一些 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
},
...
}
}

我想要的是解析它们并最终得到填充的 Book 对象的列表。我和 Jackson 以及 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%。

感谢对此的任何反馈。

最佳答案

您可以在 Gson 中编写自己的反序列化器: https://sites.google.com/site/gson/gson-user-guide#TOC-Writing-a-Deserializer

或者您可以使用所需的 setter 创建一个对象并让 Gson 完成工作: http://java.dzone.com/articles/deserializing-json-java-object

关于java - 如何在 Java 中解析 JSON 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30548196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com