Cómo convertir hashmap a objeto JSON en Java

¿Cómo convertir o lanzar hashmap a un objeto JSON en Java y volver a convertir el objeto JSON en una cadena JSON?

Puedes usar:

new JSONObject(map); 

Precaución: ¡ Esto solo funcionará para un Map!

Otras funciones que puede obtener de su documentación
http://stleary.github.io/JSON-java/index.html

Gson también se puede utilizar para serializar objetos arbitrariamente complejos.

Aquí es cómo lo usa:

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

Gson convertirá automáticamente las colecciones a matrices JSON . Gson puede serializar campos privados e ignora automáticamente campos transitorios.

Ejemplo usando 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.toString(2) ); 

salida::

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

También puede intentar usar GSON de Google. GSON de Google es la mejor biblioteca disponible para convertir objetos Java en su representación JSON.

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

Puede convertir Map to JSON usando Jackson siguiente manera:

 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); 

Dependencias de Maven para Jackson :

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

Si está utilizando la biblioteca JSONObject , puede convertir el mapa a JSON siguiente manera:

 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); 

Dependencias de Maven para JSONObject :

  org.json json 20140107  

Espero que esto ayude Feliz encoding.

Tarde para la fiesta pero aquí está mi escritor adhoc de GSON para serializar hashmap. Tuve que escribir el mapa de pares clave-valor como atributos de cadena json, espero que uno específico sea del tipo entero. No quería crear un envoltorio JavaBean personalizado para este simple uso.

La clase GSON JsonWriter es una clase de serializador fácil de usar que contiene algunas funciones fuertemente escritas de writer.value ().

 // 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(String key : sd.keySet()) { String 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 no se necesita ninguno de los tipos personalizados, podría haber usado la función Json (). La biblioteca gson-2.2.4.jar tiene poco menos de 190 KB sin dependencias brutales. Fácil de usar en cualquier aplicación servlet personalizada o aplicación independiente sin grandes integraciones de framework.

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

Esto es típicamente el trabajo de una biblioteca Json, no debes intentar hacerlo tú mismo. Todas las bibliotecas json deben implementar lo que está pidiendo, y puede encontrar una lista de bibliotecas Java Json en json.org , en la parte inferior de la página.

Encontré otra manera de manejarlo.

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

Espero que esto ayude.

Gracias.

Puede enumerar el mapa y agregar los pares clave-valor al JSONObject

Método:

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

Puede usar XStream, es realmente útil. Vea los ejemplos aquí

 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(String[] 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 está usando net.sf.json.JSONObject entonces no encontrará un JSONObject(map) en él. public static JSONObject fromObject( Object object ) utilizar el public static JSONObject fromObject( Object object ) . Este método acepta cadenas formateadas JSON, Maps, DynaBeans y JavaBeans.

JSONObject jsonObject = JSONObject.fromObject(myMap);

Si necesita usarlo en el código.

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

En mi caso, no quería ninguna dependencia. Usando Java 8 puedes obtener JSON como una cadena así de simple:

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

Aquí mi solución de línea única con GSON:

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

No es necesario tener bibliotecas de análisis Gson o JSON. Simplemente usando el new JSONObject(Map).toString() , por ejemplo:

 /** * convert target map to JSON string * * @param map the target map * @return JSON string of the map */ @NonNull public String 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 "{}"; } } 

Para aquellos que usan org.json.simple.JSONObject , puedes convertir el mapa a Json String y analizarlo para obtener JSONObject .

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

La biblioteca Underscore-java puede convertir hash map o array list en json y viceversa.

Ejemplo de código:

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

Me enfrenté a un problema similar al deserializar la respuesta de los comandos personalizados en el selenium. La respuesta fue json, pero el selenium lo traduce internamente a java.util.HashMap [String, Object]

Si está familiarizado con Scala y utiliza la API de reproducción para JSON, puede beneficiarse de esto:

 import play.api.libs.json.{JsValue, Json} import scala.collection.JavaConversions.mapAsScalaMap object JsonParser { def parse(map: Map[String, 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[String, _] @unchecked => Json.obj(key -> parse(m)) case int: Int => Json.obj(key -> int) case str: String => Json.obj(key -> str) case bool: Boolean => Json.obj(key -> bool) } } values.foldLeft(Json.obj())((temp, obj) => { temp.deepMerge(obj) }) } } 

Descripción del código pequeño:

El código se desplaza recursivamente a través del HashMap hasta que se encuentran los tipos básicos (String, Integer, Boolean). Estos tipos básicos se pueden envolver directamente en un JsObject. Cuando se despliega la recursión, el deepmerge concatena los objetos creados.

‘@unchecked’ se ocupa de las advertencias de borrado de tipo.

Puedes usar Gson . Esta biblioteca proporciona métodos simples para convertir objetos Java a objetos JSON y viceversa.

Ejemplo:

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

Puede usar un GsonBuilder cuando necesite establecer opciones de configuración distintas a las predeterminadas. En el ejemplo anterior, el proceso de conversión también serializará los atributos nulos de un objeto.

Sin embargo, este enfoque solo funciona para tipos no generics. Para los tipos generics, debe usar toJson (object, Type).

Más información sobre Gson aquí .

Recuerde que el objeto debe implementar la interfaz Serializable .

Si utiliza objetos complejos, debe aplicar enableComplexMapKeySerialization () , como se indica en https://stackoverflow.com/a/24635655/2914140 y 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 salida será:

 { "(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"]} 

Usando Gson, puede obtener una Cadena JSON de un objeto a través de una línea de la siguiente manera:

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

También puedes hacerlo con Jackson, solo incluye estas 3 bibliotecas: jackson-annotations, jackson-core y jackson-databind , y aquí tienes:

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

Referencia: Convertir objeto Java en JSON

Si realmente no necesita HashMap, puede hacer algo como eso:

 String jsonString = new JSONObject() {{ put("firstName", user.firstName); put("lastName", user.lastName); }}.toString(); 

Salida:

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