簡體   English   中英

使用Jackson將Json子對象轉換為HashMap

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM