将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