Comment convertir un object hashmap en object JSON en Java

Comment convertir ou convertir un hashmap en object JSON en Java et convertir à nouveau l’object JSON en chaîne JSON?

Vous pouvez utiliser:

new JSONObject(map); 

Attention: Cela ne fonctionnera que pour une Map!

Autres fonctions que vous pouvez obtenir de sa documentation
http://stleary.github.io/JSON-java/index.html

Gson peut également être utilisé pour sérialiser des objects arbitrairement complexes.

Voici comment vous l’utilisez:

 Gson gson = new Gson(); Ssortingng json = gson.toJson(myObject); 

Gson convertira automatiquement les collections en tableaux JSON . Gson peut sérialiser des champs privés et ignore automatiquement les champs transitoires.

Exemple d’utilisation de json

 Map data = new HashMap(); data.put( "name", "Mars" ); data.put( "age", 32 ); data.put( "city", "NY" ); JSONObject json = new JSONObject(); json.putAll( data ); System.out.printf( "JSON: %s", json.toSsortingng(2) ); 

sortie::

 JSON: { "age": 32, "name": "Mars", "city": "NY" } 

Vous pouvez également essayer d’utiliser GSON.Google GSON est la meilleure bibliothèque disponible pour convertir des objects Java dans leur représentation JSON.

http://code.google.com/p/google-gson/

Vous pouvez convertir Map en JSON utilisant Jackson comme suit:

 Map map = new HashMap<>(); //You can convert any Object. String[] value1 = new String[] { "value11", "value12", "value13" }; String[] value2 = new String[] { "value21", "value22", "value23" }; map.put("key1", value1); map.put("key2", value2); map.put("key3","string1"); map.put("key4","string2"); String json = new ObjectMapper().writeValueAsString(map); System.out.println(json); 

Dépendances Maven pour Jackson :

  com.fasterxml.jackson.core jackson-core 2.5.3 comstack   com.fasterxml.jackson.core jackson-databind 2.5.3 comstack  

Si vous utilisez la bibliothèque JSONObject , vous pouvez convertir map en JSON comme suit:

 Map map = new HashMap<>(); // Convert a map having list of values. String[] value1 = new String[] { "value11", "value12", "value13" }; String[] value2 = new String[] { "value21", "value22", "value23" }; map.put("key1", value1); map.put("key2", value2); JSONObject json = new JSONObject(map); System.out.println(json); 

Dépendances Maven pour JSONObject :

  org.json json 20140107  

J’espère que cela aidera. Heureux codage

En retard à la fête, mais voici mon écrivain ad hoc GSON pour la sérialisation de hashmap. J’ai dû écrire la carte des paires clé-valeur en tant qu’atsortingbuts de chaîne json, attendez-vous à ce qu’un type spécifique soit un type entier. Je ne voulais pas créer un wrapper JavaBean personnalisé pour cette simple firebase database.

La classe GSON JsonWriter est facile à utiliser. La classe sérialiseur contient peu de fonctions writer.value () fortement typées.

 // write Map as JSON document to http servlet response Map sd = DAO.getSD(123); res.setContentType("application/json; charset=UTF-8"); res.setCharacterEncoding("UTF-8"); JsonWriter writer = new JsonWriter(new OutputStreamWriter(res.getOutputStream(), "UTF-8")); writer.beginObject(); for(Ssortingng key : sd.keySet()) { Ssortingng val = sd.get(key); writer.name(key); if (key.equals("UniqueID") && val!=null) writer.value(Long.parseLong(val)); else writer.value(val); } writer.endObject(); writer.close(); 

Si aucun des types personnalisés n’est nécessaire, je pourrais simplement utiliser la fonction toJson (). La bibliothèque gson-2.2.4.jar a un peu moins de 190 Ko sans aucune dépendance brutale. Facile à utiliser sur n’importe quelle application de servlet personnalisée ou application autonome sans grandes intégrations de framework.

 Gson gson = new Gson(); Ssortingng json = gson.toJson(myMap); 

C’est généralement le travail d’une bibliothèque Json, vous ne devriez pas essayer de le faire vous-même. Toutes les bibliothèques json doivent implémenter ce que vous demandez et vous pouvez trouver une liste des bibliothèques Java Json sur json.org , au bas de la page.

J’ai trouvé un autre moyen de le gérer.

 Map obj=new HashMap(); obj.put("name","sonoo"); obj.put("age",new Integer(27)); obj.put("salary",new Double(600000)); Ssortingng jsonText = JSONValue.toJSONSsortingng(obj); System.out.print(jsonText); 

J’espère que cela t’aides.

Merci.

Vous pouvez simplement énumérer la carte et append les paires clé-valeur à l’object JSONObject.

Méthode :

 private JSONObject getJsonFromMap(Map map) throws JSONException { JSONObject jsonData = new JSONObject(); for (Ssortingng key : map.keySet()) { Object value = map.get(key); if (value instanceof Map) { value = getJsonFromMap((Map) value); } jsonData.put(key, value); } return jsonData; } 

Vous pouvez utiliser XStream – c’est très pratique. Voir les exemples ici

 package com.thoughtworks.xstream.json.test; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.json.JettisonMappedXmlDriver; public class WriteTest { public static void main(Ssortingng[] args) { HashMap map = new HashMap(); map.add("1", "a"); map.add("2", "b"); XStream xstream = new XStream(new JettisonMappedXmlDriver()); System.out.println(xstream.toXML(map)); } } 

Si vous utilisez net.sf.json.JSONObject vous ne trouverez pas de constructeur JSONObject(map) . Vous devez utiliser la public static JSONObject fromObject( Object object ) . Cette méthode accepte les chaînes au format JSON, Maps, DynaBeans et JavaBeans.

JSONObject jsonObject = JSONObject.fromObject(myMap);

Si vous avez besoin de l’utiliser dans le code.

 Gson gsone = new Gson(); JsonObject res = gsone.toJsonTree(sqlParams).getAsJsonObject(); 

Dans mon cas, je ne voulais pas de dépendance. En utilisant Java 8, vous pouvez obtenir JSON comme une chaîne simple:

 Map map = new HashMap<>(); map.put("key", "value"); map.put("key2", "value2"); String json = "{"+map.entrySet().stream() .map(e -> "\""+ e.getKey() + "\"" + ":\"" + Ssortingng.valueOf(e.getValue()) + "\"") .collect(Collectors.joining(", "))+"}"; 

Voici ma solution en ligne unique avec GSON:

 myObject = new Gson().fromJson(new Gson().toJson(myHashMap), MyClass.class); 

Pas besoin de bibliothèques d’parsing Gson ou JSON. Il suffit d’utiliser un new JSONObject(Map).toSsortingng() , par exemple:

 /** * convert target map to JSON ssortingng * * @param map the target map * @return JSON ssortingng of the map */ @NonNull public Ssortingng toJson(@NonNull Map map) { final Map flatMap = new HashMap<>(); for (String key : map.keySet()) { try { flatMap.put(key, toJsonObject(map.get(key))); } catch (JSONException e) { e.printStackTrace(); } } try { // 2 indentSpaces for pretty printing return new JSONObject(flatMap).toString(2); } catch (JSONException e) { e.printStackTrace(); return "{}"; } } 

Pour ceux qui utilisent org.json.simple.JSONObject , vous pouvez convertir la map en Json Ssortingng et l’parsingr pour obtenir le JSONObject .

 JSONObject object = (JSONObject) new JSONParser().parse(JSONObject.toJSONSsortingng(map)); 

La bibliothèque Underscore-java peut convertir une carte de hachage ou une liste de tableaux en json et vice-versa.

Exemple de code:

 import com.github.underscore.lodash.U; import java.util.*; public class Main { public static void main(Ssortingng[] args) { Map map = new HashMap(); map.put("1", "a"); map.put("2", "b"); System.out.println(U.toJson(map)); // { // "1": "a", // "2": "b" // } } } 

J’ai rencontré un problème similaire lors de la désérialisation de la réponse à partir de commandes personnalisées en selenium. La réponse était json, mais le selenium traduit cela en interne en java.util.HashMap [Ssortingng, Object]

Si vous êtes familier avec scala et que vous utilisez l’API play-for-JSON, vous pourriez en bénéficier:

 import play.api.libs.json.{JsValue, Json} import scala.collection.JavaConversions.mapAsScalaMap object JsonParser { def parse(map: Map[Ssortingng, Any]): JsValue = { val values = for((key, value) <- map) yield { value match { case m: java.util.Map[String, _] @unchecked => Json.obj(key -> parse(m.toMap)) case m: Map[Ssortingng, _] @unchecked => Json.obj(key -> parse(m)) case int: Int => Json.obj(key -> int) case str: Ssortingng => Json.obj(key -> str) case bool: Boolean => Json.obj(key -> bool) } } values.foldLeft(Json.obj())((temp, obj) => { temp.deepMerge(obj) }) } } 

Petite description du code:

Le code traverse récursivement le HashMap jusqu’à ce que les types de base (Ssortingng, Integer, Boolean) soient trouvés. Ces types de base peuvent être directement intégrés dans un JsObject. Lorsque la récursivité est dépliée, la deepmerge concatène les objects créés.

‘@unchecked’ prend en charge les avertissements d’effacement de type.

Vous pouvez utiliser Gson . Cette bibliothèque fournit des méthodes simples pour convertir des objects Java en objects JSON et inversement.

Exemple:

 GsonBuilder gb = new GsonBuilder(); Gson gson = gb.serializeNulls().create(); gson.toJson(object); 

Vous pouvez utiliser GsonBuilder lorsque vous devez définir des options de configuration autres que celles par défaut. Dans l’exemple ci-dessus, le processus de conversion sérialisera également les atsortingbuts null à partir de l’object.

Cependant, cette approche ne fonctionne que pour les types non génériques. Pour les types génériques, vous devez utiliser toJson (object, Type).

Plus d’informations sur Gson ici .

N’oubliez pas que l’object doit implémenter l’interface Serializable .

Si vous utilisez des objects complexes, vous devez appliquer enableComplexMapKeySerialization () , comme indiqué dans https://stackoverflow.com/a/24635655/2914140 et https://stackoverflow.com/a/26374888/2914140 .

 Gson gson = new GsonBuilder().enableComplexMapKeySerialization().create(); Map original = new LinkedHashMap(); original.put(new Point(5, 6), "a"); original.put(new Point(8, 8), "b"); System.out.println(gson.toJson(original)); 

La sortie sera:

 { "(5,6)": "a", "(8,8)": "b" } 
  import org.json.JSONObject; HashMap map = new HashMap<>(); String[] list={"Grader","Participant"}; String[] list1={"Assistant","intern"}; map.put("TeachingAssistant",list); map.put("Writer",list1); JSONObject jsonObject = new JSONObject(map); System.out.printf(jsonObject.toString()); // Result: {"TeachingAssistant":["Grader","Participant"],"Writer":["Assistant","intern"]} 

En utilisant Gson, vous pouvez extraire une chaîne JSON d’un object par une ligne comme suit:

 public static Ssortingng convertUsingGson(HashMap studentGrades) { Gson gson = new Gson(); Ssortingng studentGradesJson = gson.toJson(studentGrades); return studentGradesJson; } 

Vous pouvez aussi le faire avec Jackson, il suffit d’inclure ces 3 bibliothèques: jackson-annotations, jackson-core et jackson-databind , et voilà:

 public static Ssortingng convertUsingJackson(HashMap studentGrades) { Ssortingng studentGradesJson = ""; try { ObjectMapper mapper = new ObjectMapper(); studentGradesJson = mapper.writeValueAsSsortingng(studentGrades); } catch(Exception ex) { System.out.println("Error while converting Student Grades map to Json"); ex.printStackTrace(); } return studentJson; } 

Référence: Convertir un object Java en JSON

Si vous n’avez pas vraiment besoin de HashMap, vous pouvez faire quelque chose comme ça:

 Ssortingng jsonSsortingng = new JSONObject() {{ put("firstName", user.firstName); put("lastName", user.lastName); }}.toSsortingng(); 

Sortie:

 { "firstName": "John", "lastName": "Doe" }