List> list = new ArrayList>(); Map map = new HashMap();
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).