List<Map<String,Object>> to org.json.JSONObject?

90,499

Solution 1

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

alright, try this~ This worked for me :D

Solution 2

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

Solution 3

You need to end up with a JSONArray (corresponding to the List) of JSONObjects (the Map).

Try declaring the json variable as a JSONArray instead of a JSONObject (I believe the JSONArray constructor will do the right thing).

Solution 4

Also: you could consider using one of other parsers from json.org's list: most of them allow your Json "objects" and "arrays" to map natively to java.util.Maps and java.util.Lists; or in some cases to real Java objects too.

My recommendation would be Jackson, http://jackson.codehaus.org/Tutorial which allows for mapping to List/Map/Integer/String/Boolean/null, as well as to real Beans/POJOs. Just give it the type and it maps data to you, or writes Java objects as Json. Others like "json-tools" from berlios, or google-gson also expose similar functionality.

Solution 5

If you are using 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);
Share:
90,499
David N
Author by

David N

Updated on March 24, 2020

Comments

  • David N
    David N about 4 years
    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();
    }
    

    What's wrong with this code?

    The output is:

    {"empty": false}
    
  • David N
    David N over 15 years
    What about the case where there is a JavaBean, which contains a collection that contains Map elements, and I would like to new JSONObject(myJavaBean)? I tried and wasn't satisfied.
  • Admin
    Admin over 11 years
    It's '12 and I'm looking at the answer :) I'm looking at making something very similar to this (particularly an ArrayList of HashMaps) and this is helping out considerably.