Java JSON反序列化字符串,其属性名称为字段名称

时间:2016-01-07 17:15:53

标签: java json api serialization jackson

我从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等字段。 但如何处理国家财产?

我考虑过制作类国家但不确定因为它有“美国”作为属性名称。不是“国家”:“美国”。而且它还有自己的参数。 如何反序列化?

主要是我使用ObjectMapper object.readValue(jsonString)来做,但不知道如何处理'国家'。例如,只有一个国家“美国”,但可以更多。

2 个答案:

答案 0 :(得分:1)

声明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对象的地图。

答案 1 :(得分:0)

基本上,您需要定义一个像ViewInfo这样的POJO,它具有channel,startTime,endTime等属性。 countries也是另一个属性,但它不是原始属性,它就像一个国家代码作为键的国家,国家作为另一个POJO(具有独特,视图等属性)。这样,你应该能够将json反序列化为这个pojo。