我有以下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"
}
}
当日期每次更改时,我该如何解析呢?我必须使用Jackson进行解析。
当您具有 动态键时 ,可以使用Map<K, V>
。键的类型和值取决于您的需要。
最简单的方法是Map<String, Object>
。您需要TypeReference<T>
为此:
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>>() {});
问题内容: 这是我的Java代码,用于反序列化,我正在尝试将json字符串转换为java对象。为此,我使用了以下代码: 和我的product.java类 我收到以下错误。 帮我解决这个问题 问题答案: 似乎您正在尝试从JSON读取一个实际描述数组的对象。Java对象使用花括号映射到JSON对象,但是您的JSON实际上以方括号指定一个数组开始。 您实际拥有的是一个。为了描述泛型类型,由于Java的类
问题内容: 我有一个Java类,我对从JSON反序列化感兴趣。我已经配置了一个特殊的MixIn类,以帮助我进行反序列化。只有和实例变量与适当的getter和setter方法相结合。看起来像这样: 在我的测试客户端中,我执行以下操作,但是在编译时它当然不起作用,因为与类型不匹配有关。 我知道我可以通过创建一个仅包含一个“响应”对象的方法来缓解此问题,但是随后我将不得不为我想返回的每种类型创建这些有点
我正在调用一个返回JSON的endpoint,它看起来像这样(在Postman中): 此请求返回的Content-Type头是(与通常的 类来自外部库(编写这个endpoint的人)。无论如何,当我试图通过< code > rest template . exchange()调用这个endpoint时,Jackson都无法将这个JSON反序列化为一个有效的< code>Result类。我正在这样做
有没有办法让Jackson序列化某个流对象(并在之后关闭)?这样地: 使现代化 澄清:我想流式传输内容,而不仅仅是将其序列化到单个String对象。
问题内容: 我有一个像这样的JSON字符串: 现在,我将使用 Jackson 2.0进行 解析。我正在尝试从JSON字符串获取a 。 可能吗? 问题答案: 您的媒体资源看起来不像数组。它代表具有动态属性的对象,因此我们应将其视为对象。如果我们对属性一无所知,可以使用注释。算法可能如下所示: 将JSON反序列化为JSON模型类。 使用ObjectMapper将动态对象(地图)转换为应用的POJO类
问题内容: 我有一个这样的模型: 例如,我从远程获取以下JSON: 当我反序列化此JSON时,and 变量将获得正确的值。但是,我不想解释变量的内容。相反,我希望它是以下字符串: 之后,我将自己解释。我如何获得这个值? 问题答案: Jackson问题596是为原始问题中描述的所需功能而创建的。如果要实施,请投票。 当前可用的解决方案是实现自定义反序列化处理。