[英]Convert Json subobject to a HashMap with Jackson
我想轉換以下json字符串的bpi
字段:
{
"bpi": {
"2017-10-15": 5697.3917,
"2017-10-16": 5754.2213,
"2017-10-17": 5595.235,
"2017-10-18": 5572.1988,
"2017-10-19": 5699.5838,
"2017-10-20": 5984.0863,
"2017-10-21": 6013.2288,
"2017-10-22": 5984.9563,
"2017-10-23": 5895.2988,
"2017-10-24": 5518.85,
"2017-10-25": 5733.9038,
"2017-10-26": 5888.145,
"2017-10-27": 5767.68,
"2017-10-28": 5732.825,
"2017-10-29": 6140.5313,
"2017-10-30": 6121.8,
"2017-10-31": 6447.6675
},
"disclaimer": "This data was produced from the CoinDesk Bitcoin Price Index. BPI value data returned as USD.",
"time": {
"updated": "Nov 1, 2017 13:49:57 UTC",
"updatedISO": "2017-11-01T13:49:57+00:00"
}
}
到一個hashmap中-最好是Map<Date, Double>
但是Map<String, String>
也可以(然后我必須稍后對其進行處理)。 我在某處讀過如何將json數組轉換為java數組,但是由於所需的數組包裝在bpi
子字段中,因此我不知道如何訪問它。 你能幫我嗎?
非常感謝
與傑克遜很直接。 首先定義一個類來保存值:
@JsonIgnoreProperties(ignoreUnknown = true)
public class Foo {
private Map<LocalDate, Double> bpi;
// Getters and setters ommited
}
然后讀取您的JSON字符串:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Foo foo = mapper.readValue(json, Foo.class);
或者,您可以使用:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
JsonNode node = mapper.readTree(json).get("bpi");
ObjectReader reader = mapper.readerFor(new TypeReference<Map<LocalDate, Double>>() {});
Map<LocalDate, Double> bpi = reader.readValue(node);
LocalDate
支持來自jackson-datatype-jsr310
模塊。
添加您所投影的以下依賴項:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
然后在您的ObjectMapper
實例中注冊JavaTimeModule
:
mapper.registerModule(new JavaTimeModule());
如果您更喜歡使用Date
而不是LocalDate
,則不需要添加任何依賴項,也不需要注冊任何模塊。 在上面的示例中,只需使用Date
而不是LocalDate
。 但是我建議您改用LocalDate
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.