我有这样的 JSON:
{
"flux":{
"1400364000":{
"Optaf_matchdata":{
"uid":"749674", "fk_comp_id":"2414", "comp_id":"112", "saisonid":"2013", "temps":null, "matchday":"40"
}
},
"1400104800":{
"Optaf_matchdata":{
"uid":"749670", "fk_comp_id":"2414", "comp_id":"112", "saisonid":"2013", "temps":null, "matchday":"39"
}
}
}
}
问题在于键 1400364000
和 1400104800
是可变的。当我没有名称时,如何将其放入 @JsonProperty
?
我可以分别检索这些 key 1400364000、1400104800。例如,如何从 1400364000
键中检索 Optaf_matchdata
?
最佳答案
我通过添加客户反序列化来解决这个问题:
@JsonIgnoreProperties(ignoreUnknown = true)
public class CalendarResultsDto {
@JsonDeserialize(using=JsonMatchDeserialize.class)
@JsonProperty(value="flux")
所以在那之后返回一个 Map 女巫字符串它是关键。 JsonMatchDeserialize.java:
公共(public)类 JsonMatchDeserialize 扩展 JsonDeserializer> {
@Override
public Map<String, CalendarMatchDataDto> deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
Map<String, CalendarMatchDataDto> mapToReturn = new HashMap<String, CalendarMatchDataDto>();
JSONObject flux;
try {
flux = new JSONObject(jsonParser.getValueAsString());
ObjectMapper mapper = new ObjectMapper();
Iterator<String> iter = flux.keys();
while (iter.hasNext()) {
String key = iter.next();
try {
Object value = flux.get(key);
CalendarMatchDataDto calendarMatchDataDto = mapper.readValue(value.toString(), CalendarMatchDataDto.class);
if(key!=null && calendarMatchDataDto!=null)
mapToReturn.put(key, calendarMatchDataDto);
} catch (JSONException e) {
e.printStackTrace();
}
}
} catch (JSONException e1) {
e1.printStackTrace();
}
return mapToReturn;
}
和 CalendarMatchDataDto.java
public class CalendarMatchDataDto {
@JsonProperty(value="Optaf_matchdata")
public MatchDto matchDto ;
}
关于java - 反序列化具有键变量 jackson map ObjectMapper 的 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23388115/