[英]How to parse big nested JSON file with Jackson?
我正在Spring上開發Web API,它應該能夠提供端點並基於從JSON文件讀取的數據提供相關信息。 但是我用傑克遜反序列化嵌套的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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.