2014-04-30 1 views
2

J'essaie d'utiliser l'API stackexchange. In this link J'essaie d'obtenir des informations sur les utilisateurs.API StackExchange - Désérialise la date dans la réponse JSON

Si vous exécutez, vous obtiendrez la réponse 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" 
    }, 

Si vous voyez, les champs de date ne sont pas désérialisés. Il donne un nombre au lieu du format de date.

Comment obtenir la réponse JSON dans le format de date approprié?

J'essaye d'employer this URL dans mon code Java pour obtenir la réponse de JSON en tant que chaîne et cela fonctionne. Mais je veux l'analyser à un objet. Je dois créer une classe pour les objets, et badge_counts avec les champs nécessaires. Les champs de date doivent être des dates et non des entiers. Lors de l'analyse de l'objet à partir de la réponse de chaîne, il peut y avoir une exception d'analyse. Alors, comment puis-je résoudre cela?

Répondre

0

Il m'est arrivé de jouer avec cette chose. Les champs liés à la date que vous voyez fournissent les valeurs en millisecondes (depuis l'Epoch, UTC 1er janvier 1970), qui est du type long et non Integer. Mais puisque je voulais utiliser Date dans ma mini-application, c'est ainsi que j'ai commencé à concevoir les champs de date dans ma classe de modèle.

// 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 :) 
} 
+0

C'est faux selon la documentation de l'API StackExchange. Et "le temps en millisecondes" n'a aucun sens. Vous devez dire "temps en millisecondes depuis n'importe quel temps de base". – gnasher729

+0

@ gnasher729 - Je voulais dire les millisecondes depuis Epoch seulement. J'ai probablement oublié de le mentionner rapidement. C'est ainsi que même l'objet 'Date' de java est implémenté, au moins jusqu'à Java 7. – SudoRahul

1

De la bouche du cheval: « Toutes les dates de l'API Stack Exchange sont dans le temps d'époque unix, qui est le nombre de secondes depuis minuit UTC 1er Janvier 1970. La pile API Exchange n'accepte pas ou retour fractionnelle fois, tout devrait être arrondi à la seconde entière la plus proche. " Évidemment, cela peut facilement être converti dans le format de date que vous utilisez en interne.