gpt4 book ai didi

java - 如何使用 Jackson 解析大型嵌套 JSON 文件?

转载 作者:行者123 更新时间:2023-12-02 01:34:40 29 4
gpt4 key购买 nike

我正在 Spring 上开发 Web API,它应该能够提供端点并根据从 JSON 文件读取的数据提供相关信息。但我在使用 Jackson 反序列化嵌套 JSON 文件时遇到问题。

我创建了一个 Book 类,并尝试将 JSON 映射到 HashMap 以保留这些对象。但 JSON 文件的数据比我想要的要多,而且它的嵌套类似于“volumeInfo”。

class Book {

private String isbn;
private String title;
private String subtitle;
private String publisher;
private long publishedDate;
private String description;
private int pageCount;
private String thumbnailUrl;
private String language;
private String previewLink;
private double averageRating;
private String[] authors;
private String[] categories;

// getters and setters

data.json 文件示例


{
"requestedUrl": "https://www.googleapis.com/books/v1/volumes?q=java&maxResults=40",
"items": [
{
"kind": "books#volume",
"id": "7tkN1CYzn2cC",
"etag": "pfjjxSpetIM",
"selfLink": "https://www.googleapis.com/books/v1/volumes/7tkN1CYzn2cC",
"volumeInfo": {
"title": "A Hypervista of the Java Landscape",
"publisher": "InfoStrategist.com",
"industryIdentifiers": [
{
"type": "ISBN_13",
"identifier": "9781592432172"
},
{
"type": "ISBN_10",
"identifier": "1592432174"
}
],

]
}

我如何通过 Jackson 获取该volumeInfo?

最佳答案

您需要将其解析为 JsonNode,迭代数组中的每个节点并转换为 Book:

ObjectMapper mapper = new ObjectMapper();
mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

JsonNode root = mapper.readTree(json); // read as JsonNode
JsonNode items = root.at("/items");
List<Book> books = new ArrayList<>();
if (items.isArray()) {
ArrayNode array = (ArrayNode) items;
array.forEach(n -> {
Book book = mapper.convertValue(n.get("volumeInfo"), Book.class); // convert to Book
books.add(book);
});
}
System.out.println(books);

关于java - 如何使用 Jackson 解析大型嵌套 JSON 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55419375/

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