将HashMap的ArrayList转换为JSON字符串

5
我希望将 ArrayList<Hashmap<String,String>> 转换成 JSONArray。我已经使用了
JSONArray array = new JSONArray(array_list);

但它不能正常工作,返回

["{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}"]

相反,它应该返回
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"}]

那个第一个 JSON 块只是一个字符串数组... 你确定可以像那样将 ArrayList 传递到 JSONArray 的构造函数中吗?看起来它只是将列表的每个元素 toString 了一下。 - OneCricketeer
@cricket_007 我不确定,因为它适用于简单的ArrayList<string>,但不适用于ArrayList<hashmap<string,string>>。 - Infinity
为什么不在这里发布你的ArrayList呢? - Kostas Drak
如果我猜的话,任何类型,如int、string和boolean都可以用来从列表构造JSONArray,因为它们是JSON数据类型。你需要做的是循环遍历你的Arraylist,并从每个Hashmap创建一个新的JsonObject,然后将每个JsonObject添加到JSONArray中。 - OneCricketeer
1个回答

15
有许多方法可以实现这一点。我将解释两种方法:

您可以这样做:

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

或者您可以使用Jackson对象映射器:

下载Jackson Core

下载Jackson Mapper

将外部库添加到Eclipse项目中

向Eclipse Android项目添加库/JAR

Java代码

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

两个选项都将打印:

[{"image":"2130837526","category":"Chairs","Quantity":"1"},{"image":"2130837566","category":"Mirrors","Quantity":"2"}]

你的集成开发环境是Android Studio吗? - André Bonna
将外部库添加到Android Studio:https://dev59.com/questions/d2Qn5IYBdhLWcg3wvZN_ - André Bonna
我正在使用Eclipse IDE @andrebonna - Infinity
好的,我修改了我的回答以帮助你使用Eclipse。 - André Bonna
我还添加了另一种实现方式。 - André Bonna
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接