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

标签 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 等字段。 但如何处理国家属性(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/

相关文章:

java - POST 500(内部服务器错误) - AngularJS - Jersey API

java - 如何在 Struts with Tiles 中获取真实的请求 URL?

javascript - jQuery AJAX 响应 JSON 获取子节点

php - 创建一个以 API 为中心的应用程序,我自己的疑惑

api - global_merge_vars 不起作用

java - 在 Retrofit2 中,Call<String> 在一个界面中工作正常,但相同的代码在其他界面中无法工作

java - 从 Javascript 调用 Java (Birt)

javascript - 使用一个输入字段提交 HTML 表单返回 : Uncaught TypeError: Converting circular structure to JSON

python - 抓取脚本提供的 JSON 并转换为数据帧

asp.net-mvc - 如何在 azure 中创建 API 运行状况检查?