将ArrayList <MyCustomClass>转换为JSONArray

我有一个ArrayList,我在ArrayAdapter中使用ListView。 我需要采取列表中的项目,并将其转换为JSONArray发送到API。 我已经四处搜寻,但还没有find任何解释如何工作,任何帮助将不胜感激。

更新 – 解决scheme

这是我最终解决问题的方法。

ArrayList中的对象:

public class ListItem { private long _masterId; private String _name; private long _category; public ListItem(long masterId, String name, long category) { _masterId = masterId; _name = name; _category = category; } public JSONObject getJSONObject() { JSONObject obj = new JSONObject(); try { obj.put("Id", _masterId); obj.put("Name", _name); obj.put("Category", _category); } catch (JSONException e) { trace("DefaultListItem.toString JSONException: "+e.getMessage()); } return obj; } } 

这是我如何转换它:

 ArrayList<ListItem> myCustomList = .... // list filled with objects JSONArray jsonArray = new JSONArray(); for (int i=0; i < myCustomList.size(); i++) { jsonArray.put(myCustomList.get(i).getJSONObject()); } 

而输出:

 [{"Name":"Name 1","Id":0,"Category":"category 1"},{"Name":"Name 2","Id":1,"Category":"category 2"},{"Name":"Name 3","Id":2,"Category":"category 3"}] 

希望有一天能帮助别人!

如果我正确读取了JSONArray构造函数,可以从任何Collection(arrayList是Collection的子类)中构build它们,如下所示:

 ArrayList<String> list = new ArrayList<String>(); list.add("foo"); list.add("baar"); JSONArray jsArray = new JSONArray(list); 

参考文献:

  • jsonarray构造函数: http : //developer.android.com/reference/org/json/JSONArray.html#JSONArray%28java.util.Collection%29
  • 集合: http : //developer.android.com/reference/java/util/Collection.html

使用Gson库将ArrayList转换为JsonArray。

 Gson gson = new GsonBuilder().create(); JsonArray myCustomArray = gson.toJsonTree(myCustomList).getAsJsonArray(); 

正如有人指出,OP想要自定义列表转换​​为org.json.JSONArray而不是com.google.gson.JsonArray正确的答案应该是这样的:

 Gson gson = new Gson(); String listString = gson.toJson( targetList, new TypeToken<ArrayList<targetListItem>>() {}.getType()); JSONArray jsonArray = new JSONArray(listString); 
 public void itemListToJsonConvert(ArrayList<HashMap<String, String>> list) { JSONObject jResult = new JSONObject();// main object JSONArray jArray = new JSONArray();// /ItemDetail jsonArray for (int i = 0; i < list.size(); i++) { JSONObject jGroup = new JSONObject();// /sub Object try { jGroup.put("ItemMasterID", list.get(i).get("ItemMasterID")); jGroup.put("ID", list.get(i).get("id")); jGroup.put("Name", list.get(i).get("name")); jGroup.put("Category", list.get(i).get("category")); jArray.put(jGroup); // /itemDetail Name is JsonArray Name jResult.put("itemDetail", jArray); return jResult; } catch (JSONException e) { e.printStackTrace(); } } } 

我知道它已经回答了,但是更好的解决scheme在这里使用这个代码:

 for ( Field f : context.getFields() ) { if ( f.getType() == String.class ) || ( f.getType() == String.class ) ) { //DO String To JSON } /// And so on... } 

这样你就可以从类访问variables,而不需要手动input它们。

更快,更好..希望这有助于。

干杯。 :d