5

I want to convert ArrayList<Hashmap<String,String>> to JSONArray. I used

JSONArray array = new JSONArray(array_list);

but it does not work properly it returns

["{image=2130837526, category=Chairs, Quantity=1, price=400, name=chair, prodId=34}","{image=2130837566, category=Mirrors, Quantity=1, price=3000, name=La Fonda, prodId=35}"]

Instead it should return

cartitems=[{"name":"Chair","price":"1001","prodId":"2","category":"Chairs","image":"2130837519","Quantity":"1"},{"name":"Baxton Studio Club Chair","price":"4545","prodId":"5","category":"Chairs","image":"2130837521","Quantity":"1"}]
André Bonna
  • 807
  • 8
  • 13
Infinity
  • 441
  • 2
  • 5
  • 12
  • That first JSON block is just an array of strings... Are you sure you can pass an Arraylist into the constructor of JSONArray like that? Looks like it just toString'd every element of the list – OneCricketeer Mar 13 '16 at 13:35
  • @cricket_007 I am not sure about it becase it work for simple ArrayList but not working for ArrayList> – Infinity Mar 13 '16 at 13:41
  • why dont you post your Arraylist here? – Kostas Drak Mar 13 '16 at 13:43
  • If I had to guess, any type such as int, string, and boolean can be used to construct a JSONArray from a list because those are JSON datatypes. What you need to do is loop over your Arraylist, and create a new JsonObject from each Hashmap, then add each of those to the JSONArray – OneCricketeer Mar 13 '16 at 13:45

1 Answers1

15

There are many ways to achieve that. I will explain two ways:

You can do like this:

ArrayList<HashMap<String, String>> dataMap = new ArrayList<HashMap<String, String>>();

HashMap<String, String> data1 = new HashMap<String, String>();
data1.put("image", "2130837526");
data1.put("category", "Chairs");
data1.put("Quantity", "1");

HashMap<String, String> data2 = new HashMap<String, String>();
data2.put("image", "2130837566");
data2.put("category", "Mirrors");
data2.put("Quantity", "2");

dataMap.add(data1);
dataMap.add(data2);


List<JSONObject> jsonObj = new ArrayList<JSONObject>();

for(HashMap<String, String> data : dataMap) {
    JSONObject obj = new JSONObject(data);
    jsonObj.add(obj);
}

JSONArray test = new JSONArray(jsonObj);

System.out.println(test.toString());

Or you can use Jackson Object Mapper:

Download Jackson Core

Download Jackson Mapper

Add external libraries to Eclipse Project

Adding a library/JAR to an Eclipse Android project

Java Code

ArrayList<HashMap<String, String>> dataMap = new ArrayList<HashMap<String, String>>();

HashMap<String, String> data1 = new HashMap<String, String>();
data1.put("image", "2130837526");
data1.put("category", "Chairs");
data1.put("Quantity", "1");

HashMap<String, String> data2 = new HashMap<String, String>();
data2.put("image", "2130837566");
data2.put("category", "Mirrors");
data2.put("Quantity", "2");

dataMap.add(data1);
dataMap.add(data2);

ObjectMapper objectMapper = new ObjectMapper();

String json = objectMapper.writeValueAsString(dataMap);

System.out.println(json);

Both options will print:

[{"image":"2130837526","category":"Chairs","Quantity":"1"},{"image":"2130837566","category":"Mirrors","Quantity":"2"}]
Community
  • 1
  • 1
André Bonna
  • 807
  • 8
  • 13