GSON désérialisation clé-valeur d'objet personnalisé
J'ai besoin de désérialiser json qui est un tableau de la date et de valeurs longues. Voici un exemple de retour JSON:
[{"2011-04-30T00:00:00-07:00":100}, {"2011-04-29T00:00:00-07:00":200}]
À l'aide de GSON je suis en mesure de désérialiser à un List<Map<Date,String>>
, mais voudrait être en mesure de le convertir à une List<MyCustomClass>
similaires à:
public class MyCustomClass() {
Date date;
Long value;
}
Je n'arrive pas à trouver un moyen de demander GSON à la carte, la clé/valeur du JSON carte de la date/de la valeur des champs dans ma classe personnalisée. Est-il un moyen de le faire, ou une liste de cartes la seule voie?
- Il ne pourra pas, sauf si votre document est comme
[{"date":"2011"2011-04-30T00:00:00-07:00","value":100}, {"date":"2011-04-29T00:00:00-07:00","value":200}]
- vraiment? Ma réponse dit le contraire (et a été posté avant que votre commentaire)
- Ma solution est sur le côté de l'entrée, où si son document sont la façon dont je l'ai recommandé, il aurait pu tout faire
gson.fromJSON(inputJson, List<MyCustomClass.class>)
sans passer par beaucoup de code. Mais je suis d'accord, votre solution est plus générique et qui correspond à son besoin.
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin d'écrire une coutume deserializer. Vous devez également utiliser un fuseau horaire, format
SimpleDateFormat
peut effectivement analyser. Niz
niZ
correspondra-07:00
, qui est un étrange mélange de la RFC 822 fuseau horaire format (-0700
) ou un "général de fuseau horaire" (Mountain Standard Time
ouMST
ouGMT-07:00
). Alternativement, vous pouvez coller avec le même temps exact de la zone format, et utilisation JodaTime deDateTimeFormat
.MyCustomClass.java
MyCustomDeserializer.java
GsonTest.java
Tous le code ci-dessus est sur Github, n'hésitez pas à cloner (bien que vous obtiendrez le code pour obtenir des réponses à d'autres questions).
Très similaire à Matts réponse, mais à l'aide de Joda: