Перечислите <Map <String, Object >> в org.json.JSONObject? - PullRequest
13 голосов
/ 04 февраля 2009
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();
}

Что не так с этим кодом?

Вывод:

{"empty": false}

Ответы [ 8 ]

20 голосов
/ 03 мая 2012
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

4 голосов
/ 14 апреля 2010
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();
}
2 голосов
/ 04 февраля 2009

Вам нужно получить JSONArray (соответствующий списку) JSONObjects (карта).

Попробуйте объявить переменную json как JSONArray вместо JSONObject (я считаю, что конструктор JSONArray будет делать правильные вещи).

1 голос
/ 23 марта 2017

Если вы используете 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);
1 голос
/ 16 октября 2009

Это сработало для меня:

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();
}
1 голос
/ 24 февраля 2009

Также: вы можете рассмотреть возможность использования одного из других анализаторов из списка json.org: большинство из них позволяют вашим «объектам» и «массивам» Json отображаться непосредственно в java.util.Maps и java.util.Lists; или в некоторых случаях к реальным объектам Java тоже.

Моя рекомендация будет Джексон, http://jackson.codehaus.org/Tutorial который позволяет отображать в List / Map / Integer / String / Boolean / null, а также в реальные Beans / POJO. Просто дайте ему тип, и он отобразит вам данные, или напишет объекты Java как Json Другие, такие как «json-tools» от berlios или google-gson, также предоставляют аналогичную функциональность.

1 голос
/ 04 февраля 2009

У вас есть карта, вложенная в список. Вы пытаетесь вызвать карту, не перебирая сначала список. JSON иногда кажется волшебством, но на самом деле это не так. Я выложу код через минуту.
Было бы более согласованно с JSON создавать карту карт вместо списка карт.

JSONObject json = new JSONObject(list);
Iterator<?> it = json.keys();
while (keyed.hasNext()) {
    String x = (String) it.next();
    JSONObject jo2 = new JSONObject(jo.optString(x));
}
0 голосов
/ 06 декабря 2016

Вы можете сделать это, используя оба:

JSONArray прямо как,

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

Или путем итерации списка с Java8 (например, решение @ShadowJohn):

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