StackExchange API - 在JSON响应中反序列化日期

时间:2014-04-30 05:16:59

标签: java json json-deserialization stackexchange-api

我正在尝试使用stackexchange api。 In this link我正在尝试获取一些用户信息。

如果您运行,它将获得JSON响应。

{
  "items": [
    {
      "badge_counts": {
        "bronze": 5630,
        "silver": 4212,
        "gold": 267
      },
      "account_id": 11683,
      "is_employee": false,
      "last_modified_date": 1398827800,
      "last_access_date": 1398799412,
      "reputation_change_year": 34829,
      "reputation_change_quarter": 7965,
      "reputation_change_month": 7965,
      "reputation_change_week": 930,
      "reputation_change_day": 60,
      "reputation": 669736,
      "creation_date": 1222430705,
      "user_type": "registered",
      "user_id": 22656,
      "age": 37,
      "accept_rate": 88,
      "location": "Reading, United Kingdom",
      "website_url": "http://csharpindepth.com",
      "link": "http://stackoverflow.com/users/22656/jon-skeet",
      "display_name": "Jon Skeet",
      "profile_image": "https://www.gravatar.com/avatar/6d8ebb117e8d83d74ea95fbdd0f87e13?s=128&d=identicon&r=PG"
    },
    {
      "badge_counts": {
        "bronze": 1646,
        "silver": 1456,
        "gold": 64
      },
      "account_id": 14332,
      "is_employee": false,
      "last_modified_date": 1397859689,
      "last_access_date": 1398787554,
      "reputation_change_year": 26427,
      "reputation_change_quarter": 5693,
      "reputation_change_month": 5693,
      "reputation_change_week": 640,
      "reputation_change_day": 20,
      "reputation": 513076,
      "creation_date": 1224432467,
      "user_type": "registered",
      "user_id": 29407,
      "age": 32,
      "accept_rate": 91,
      "location": "Sofia, Bulgaria",
      "website_url": "http://stackoverflow.com/search?q=user%3a29407&tab=newest",
      "link": "http://stackoverflow.com/users/29407/darin-dimitrov",
      "display_name": "Darin Dimitrov",
      "profile_image": "https://www.gravatar.com/avatar/e3a181e9cdd4757a8b416d93878770c5?s=128&d=identicon&r=PG"
    },

如果看到,日期字段不会反序列化。它给出了数字而不是日期格式。

如何以适当的日期格式获取JSON响应?

我正在尝试在我的Java代码中使用this URL来将JSON响应作为String获取并且它正在工作。但是我想把它解析成一个对象。 我必须为项目创建类,并使用其中包含所需字段的badge_counts。日期字段必须是日期而不是整数。 在从字符串响应解析为对象时,可能存在解析异常。那我怎么解决呢?

2 个答案:

答案 0 :(得分:2)

来自马口:" Stack Exchange API中的所有日期都处于unix纪元时间,即1970年1月1日午夜UTC以来的秒数.Stack Exchange API不接受或者返回小数时间,一切都应该四舍五入到最接近的整秒。"显然,可以使用内部使用的任何日期格式轻松转换。

答案 1 :(得分:0)

有时候我碰巧玩这个东西。您看到的与日期相关的字段提供以毫秒为单位的值(自纪元,UTC 1970年1月1日起),其为long类型而非Integer。但由于我想在我的迷你应用程序中使用Date,这就是我在模型类中设计日期字段的方式。

// Example for one field - can be extended for all other Date related fields.

private Long last_access_date; // Let this be as long or Long (your need)

public void setLast_access_date(Long last_access_date) { // The json parsers use the setter method to set the value
    this.last_access_date = last_access_date; // the long value is set, no issues here :)
}

public Date getLast_access_date() { // you use the getter in your code
    return new Date(last_access_date); // return a new date using the milliseconds and have a Date in your application to display :)
}