Désérialiser JSON en objet existant (Java)
Je voudrais savoir comment on peut obtenir le Jackson librairie JSON pour désérialiser JSON dans un objet existant? J'ai essayé de trouver comment cette; mais il semble être la seule à être en mesure de prendre une Classe et de l'instancier lui-même.
Ou si pas possible, je voudrais savoir si Java JSON désérialisation les bibliothèques peuvent le faire.
Cela semble être une question correspondante pour C#: Données de superposition de chaîne JSON à l'instance d'un objet existant. Il semble JSON.NET a un PopulateObject(string,object).
- Avez-vous eu un coup d'oeil à Gson ? code.google.com/p/google-gson
- Seulement superficielle. Peut-il faire de plus?
- Il semble qu'il ne peut pas, il y a un Gson de l'émission "Question 431: Remplir un objet existant" dans le code.google.com/p/google-gson/issues/detail?id=431
- ...et le "Gson feuille de route", a seulement "des Versions Prévues: Gson 2.2.3:" et vide de l'espace.
- ok, bon à savoir
- Regarde cette approche stackoverflow.com/questions/55426453/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez le faire à l'aide de Jackson:
Voir aussi La fusion des Deux Documents JSON à l'Aide de Jackson
readValue
ne va pas lancer des exceptions si ne peut pas analyserjson
. Est-il possible de revenir à un comportement normal?Si vous pouvez utiliser une autre bibliothèque à la place de Jackson, vous pouvez essayer de Genson http://owlike.github.io/genson/. En plus de quelques autres fonctionnalités intéressantes (comme les désérialiser à l'aide d'un non constructeur vide, sans aucune annotation, désérialiser de types polymorphes, etc) il prend en charge la désérialisation de JavaBean dans une instance existante. Voici un exemple:
Si vous avez des question n'hésitez pas à utiliser la liste de diffusion de http://groups.google.com/group/genson.
Be as much extensible as possible by allowing users to add new functionnalities in a clean and easy way. Genson applies the philosophy that "We can not think of every use case, so give to users the ability to do it by them self in a easy way".
Si vous êtes à l'aide de spring framework, vous pouvez utiliser BeanUtils bibliothèque pour cette tâche. Première désérialiser votre Chaîne json normalement et ensuite utiliser BeanUtils pour définir cet objet à l'intérieur d'un objet parent. Il attend également de la variable nom de l'objet à définir à l'intérieur de l'objet parent.
Voici l'extrait de code:
Une solution consiste à analyser un nouvel objet graphique/arbre, et ensuite unifier-copie de l'objet graphique/arbre. Mais c'est évidemment moins efficace, et plus de travail, surtout si le béton types diffèrent à cause de la diminution de la disponibilité de l'information de type. (Donc pas vraiment une réponse. J'espère qu'il y a une meilleure solution, je veux juste pour éviter que d'autres de répondre de cette façon).
flexJson peut également vous aider à faire de même.
Voici un exemple copié à partir de FlexJson Doc
La deserializeInto fonction prend votre chaîne et la référence à un objet existant.
Noter que la référence renvoyée dans p est la même que charlieClone seulement avec les valeurs mises à jour.
J'ai utilisé Jackson + du Printemps DataBinder d'accomplir quelque chose de ce genre. Ce code gère les tableaux, mais pas les objets imbriqués.
peut toujours charger dans un objet factice et utiliser la réflexion pour transférer les données. si votre coeur est fixé sur l'aide de gson
exemple.
en supposant que ce code est dans l'objet que vous souhaitez copier des données dans
}