jmapper example bean java json javabeans map

java - example - mapstruct gradle



Lista<Map<String, Object>> a org.json.JSONObject? (8)

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("abc", "123456"); map.put("def", "hmm"); list.add(map); JSONObject json = new JSONObject(list); try { System.err.println(json.toString(2)); } catch (JSONException e) { e.printStackTrace(); }

¿Qué pasa con este código?

El resultado es:

{"empty": false}


Debe terminar con un JSONArray (correspondiente a la Lista) de JSONObjects (el Mapa).

Intenta declarar la variable json como JSONArray en lugar de JSONObject (creo que el constructor JSONArray hará lo correcto).


Además: podría considerar usar uno de los otros analizadores de la lista de json.org: la mayoría de ellos permiten que sus "objetos" y "arreglos" de Json se mapeen de forma nativa a java.util.Maps y java.util.Lists; o en algunos casos también a objetos reales de Java.

Mi recomendación sería Jackson, http://jackson.codehaus.org/Tutorial , que permite mapear a List / Map / Integer / String / Boolean / null, así como a Beans / POJOs reales. Simplemente dele el tipo y le asigna datos, o escribe objetos Java como Json. Otros como "json-tools" de berlios o google-gson también exponen una funcionalidad similar.


Esto funcionó para mí:

List<JSONObject> jsonCategories = new ArrayList<JSONObject>(); JSONObject jsonCategory = null; for (ICategory category : categories) { jsonCategory = new JSONObject(); jsonCategory.put("categoryID", category.getCategoryID()); jsonCategory.put("desc", category.getDesc()); jsonCategories.add(jsonCategory); } try { PrintWriter out = response.getWriter(); response.setContentType("text/xml"); response.setHeader("Cache-Control", "no-cache"); _log.info(jsonCategories.toString()); out.write(jsonCategories.toString()); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }


Tienes un mapa anidado dentro de una lista. está intentando llamar al Mapa sin repetir primero la lista. JSON a veces se siente como magia, pero de hecho no lo es. Voy a publicar un código en un momento.
Sería más consistente con JSON hacer un Mapa de Mapas en lugar de una Lista de Mapas.

JSONObject json = new JSONObject(list); Iterator<?> it = json.keys(); while (keyed.hasNext()) { String x = (String) it.next(); JSONObject jo2 = new JSONObject(jo.optString(x)); }


List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); Map<String, Object> map = new HashMap<String, Object>(); map.put("abc", "123456"); map.put("def", "hmm"); list.add(map); // it''s wrong JSONObject json = new JSONObject(list); // if u use list to add data u must be use JSONArray JSONArray json = JSONArray.fromObject(list); try { System.err.println(json.toString(2)); } catch (JSONException e) { e.printStackTrace(); }


public String listmap_to_json_string(List<Map<String, Object>> list) { JSONArray json_arr=new JSONArray(); for (Map<String, Object> map : list) { JSONObject json_obj=new JSONObject(); for (Map.Entry<String, Object> entry : map.entrySet()) { String key = entry.getKey(); Object value = entry.getValue(); try { json_obj.put(key,value); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } json_arr.put(json_obj); } return json_arr.toString(); }

bien, prueba esto ~ Esto funcionó para mí: D


Puedes hacerlo usando ambos:

JSONArray directamente como,

String toJson(Collection<Map<String, Object>> list) { return new JSONArray(list).toString(); }

O al iterar la lista con Java8 (como la solución @ShadowJohn):

String toJson(Collection<Map<String, Object>> list) { return new JSONArray( list.stream() .map((map) -> new JSONObject(map)) .collect(Collectors.toList())) .toString(); }