我从 API 接收到这样的 json:
{
"channel":"masta",
"startTime":1427673600000,
"endTime":1427760000000,
"totalUniques":1,
"totalViewtime":1927,
"totalViews":13,
"totalCountries":1,
"countries":{
"US":{
"uniques":1,
"views":13,
"viewtime":1927
}
}
}
现在我想将其反序列化为类,因此该类(Stats)将具有 channel 、startTime 等字段。 但如何处理国家属性(property)呢?
我考虑过创建国家类,但不确定,因为它的属性名称是“US”。不是“国家”:“美国”。更重要的是它有自己的参数。 如何反序列化它?
我主要使用 ObjectMapper object.readValue(jsonString) 来执行此操作,但不知道如何处理“国家/地区”。例如,只有一个国家/地区“美国”,但可以有更多国家/地区。
最佳答案
声明Country
类:
public class Country {
private int uniques;
private int views;
private int viewtime;
public int getUniques() {
return uniques;
}
public void setUniques(int uniques) {
this.uniques = uniques;
}
public int getViews() {
return views;
}
public void setViews(int views) {
this.views = views;
}
public int getViewtime() {
return viewtime;
}
public void setViewtime(int viewtime) {
this.viewtime = viewtime;
}
}
在您的 Stats
类中,您应该将 countries
声明为 Country
对象的映射:
public class Stats {
private String channel;
private Long startTime;
private Long endTime;
private int totalUniques;
private int totalViewtime;
private int totalViews;
private int totalCountries;
...
private Map<String, Country> countries;
public Map<String, Country> getCountries() {
return countries;
}
public void setCountries(Map<String, Country> countries) {
this.countries = countries;
}
}
现在您可以反序列化您的对象:
ObjectMapper mapper = new ObjectMapper();
Stats stats = mapper.readValue(jsonString, Stats.class);
反序列化后,您的 Stack
对象将获得带有一个带有“US”键的 Country
对象的 map 。
关于Java JSON 反序列化字符串,使用属性名称作为字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34661279/