Comment désérialiser une Map<String, Object> dans POJO?
J'ai une Map<String, Object> qui contient un désérialisé forme de JSON. Je tiens à désérialiser ce dans les champs d'un POJO.
Je peux réaliser cela à l'aide de Gson par la sérialisation de la Carte dans une chaîne JSON et puis la désérialisation de la chaîne JSON dans le POJO, mais c'est inefficace (voir exemple ci-dessous). Comment puis-je faire cela sans l'étape intermédiaire?
La solution doit, de préférence, utiliser Gson ou Jackson, car ils sont déjà en cours d'utilisation par le projet.
Exemple de code:
import java.util.HashMap;
import java.util.Map;
import com.google.gson.Gson;
public class Test {
public static void main(String[] args) {
Map<String, Object> innermap = new HashMap<String, Object>();
innermap.put("number", 234);
innermap.put("string", "bar");
Map<String, Object> map = new HashMap<String, Object>();
map.put("number", 123);
map.put("string", "foo");
map.put("pojo2", innermap);
Gson gson = new Gson();
//How to perform this without JSON serialization?
String json = gson.toJson(map);
MyPojo pojo = gson.fromJson(json, MyPojo.class);
System.out.println(pojo);
}
}
class MyPojo {
private int number;
private String string;
private MyPojo pojo2;
@Override
public String toString() {
return "MyPojo[number=" + number + ", string=" + string + ", pojo2=" + pojo2 + "]";
}
}
Double Possible de Convertir une Map<String, String> pour un POJO
OriginalL'auteur Sampo | 2014-08-22
Vous devez vous connecter pour publier un commentaire.
À l'aide de Gson, vous pouvez activer votre Carte en un
JsonElement
, que vous pouvez ensuite analyser exactement de la même manière, en utilisantfromJson
:Ceci est similaire à la
toJson
méthode que vous utilisez déjà, sauf qu'il évite d'écrire la Chaîne JSON représentation et puis l'analyse que la Chaîne JSON de retour dans une JsonElement avant de la convertir dans votre classe.OriginalL'auteur andersschuller
Dans
Jackson
vous pouvez utiliser convertValue méthode. Voir exemple ci-dessous:OriginalL'auteur Michał Ziober
Vous pouvez directement la construction de MyPojo en lui donnant de la carte.
Quelque chose comme
Et à la déclaration d'une fonction constructeur :
OriginalL'auteur user1191976
Vous pouvez utiliser jackson bibliothèque pour convertir une carte objet direct POJO.
OriginalL'auteur user1759579