杰克逊 - 使用动态密钥对json进行序列化 [英] Jackson - De-Serialize json with dynamic key
本文介绍了杰克逊 - 使用动态密钥对json进行序列化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下JSON:
{
"2016-01-23": {
"downloads": 4,
"re_downloads": 1,
"updates": 0,
"returns": 0,
"net_downloads": 4,
"promos": 0,
"revenue": "0.00",
"returns_amount": "0.00",
"edu_downloads": 0,
"gifts": 0,
"gift_redemptions": 0,
"date": "2016-01-23"
},
"2016-01-24": {
"downloads": 1,
"re_downloads": 1,
"updates": 0,
"returns": 0,
"net_downloads": 1,
"promos": 0,
"revenue": "0.00",
"returns_amount": "0.00",
"edu_downloads": 0,
"gifts": 0,
"gift_redemptions": 0,
"date": "2016-01-24"
}
}
如果每次更改日期,我该如何解析?我必须使用杰克逊进行解析。
How can I parse this, when the date will change everytime? I must use Jackson to do the parsing.
推荐答案
当你有动态密钥时,你可以使用 Map< K,V>
一>。键的类型和值取决于您的需求。
When you have dynamic keys, you can use a Map<K, V>
. The type of the keys and the values depend on your needs.
最简单的方法是 Map< ; String,Object>
。你需要一个 TypeReference< T>
:
The simplest approach is Map<String, Object>
. You'll need a TypeReference<T>
for that:
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map =
mapper.readValue(json, new TypeReference<Map<String, Object>>() {});
假设您的密钥是有效日期,您可以使用 Map< LocalDate,Object>
。
需要以下依赖项:
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
然后你可以:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Map<LocalDate, Object> map =
mapper.readValue(json, new TypeReference<Map<LocalDate, Object>>() {});
最后,你可以映射动态的值Java类的键。我们称之为 Foo
:
public class Foo {
private Integer downloads;
@JsonProperty("re_downloads")
private Integer reDownloads;
private Integer updates;
private Integer returns;
@JsonProperty("net_downloads")
private Integer netDownloads;
private Integer promos;
private String revenue;
@JsonProperty("returns_amount")
private String returnsAmount;
@JsonProperty("edu_downloads")
private Integer eduDownloads;
private Integer gifts;
@JsonProperty("gift_redemptions")
private Integer giftRedemptions;
// Default constructor, getters and setters omitted
}
然后你可以有一个 Map< LocalDate,Foo>
:
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
Map<LocalDate, Foo> map =
mapper.readValue(json, new TypeReference<Map<LocalDate, Foo>>() {});
这篇关于杰克逊 - 使用动态密钥对json进行序列化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文