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();
}
Quel est le problème avec ce code?
La sortie est:
{"empty": false}
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();
}
d'accord, essayez ceci ~ Cela a fonctionné pour moi: D
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();
}
Vous devez vous retrouver avec un tableau JSON (correspondant à la liste) de JSONObjects (la carte).
Essayez de déclarer la variable JSON en tant que JSONArray au lieu de JSONObject (je pense que le constructeur JSONArray fera ce qu'il faut).
Si vous utilisez org.json.simple.JSONArray
( https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple/1.1.1 )
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);
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(listOfMaps);
Cela a fonctionné pour moi:
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();
}
De plus, vous pouvez envisager d'utiliser l'un des autres analyseurs de la liste de json.org: la plupart d'entre eux permettent à vos "objets" et "matrices" Json de mapper de manière native vers Java.util.Maps et Java.util.Lists; ou dans certains cas à de vrais objets Java aussi.
Ma recommandation serait Jackson, http://jackson.codehaus.org/Tutorial , Qui permet un mappage vers List/Map/Integer/String/Boolean/null, ainsi que vers de vrais haricots/POJOs. Donnez-lui simplement le type et il mappe les données, ou écrit des objets Java au format Json. D'autres, comme "json-tools" de berlios ou google-gson, offrent également des fonctionnalités similaires.
Vous avez une carte imbriquée dans une liste. vous essayez d'appeler la carte sans jamais parcourir d'abord la liste. JSON a parfois l’impression d’être magique, mais ce n’est pas le cas. Je posterai du code dans un instant.
Il serait plus cohérent avec JSON de créer une carte de cartes au lieu d’une liste de cartes.
JSONObject json = new JSONObject(list);
Iterator<?> it = json.keys();
while (keyed.hasNext()) {
String x = (String) it.next();
JSONObject jo2 = new JSONObject(jo.optString(x));
}
Vous pouvez le faire en utilisant à la fois:
JSONArray
directement comme,
String toJson(Collection<Map<String, Object>> list)
{
return new JSONArray(list).toString();
}
Ou en itérant la liste avec Java8 (comme la solution @ShadowJohn):
String toJson(Collection<Map<String, Object>> list)
{
return new JSONArray(
list.stream()
.map((map) -> new JSONObject(map))
.collect(Collectors.toList()))
.toString();
}