2017-05-11 48 views
0

我已經創建了一個ArrayList,我需要將其轉換爲一個JSONarray:Android的 - 自定義模型的ArrayList保存到JSON

這是我ArrayList<model>對象的樣子:

modelList.add(new model("String", 9.99 /*Double*/, null /*Date*/, R.drawable.drawable, R.color.color, 1 /*int*/, 0 /*int*/)); 
... 

這是我試過到目前爲止:

public void saveArrayListtoJSON(ArrayList<Model> modelList) { 
     JSONArray myJSONArray = new JSONArray(); 
      JSONObject obj = new JSONObject(); 
      obj.put("key", modelList); 
      myJSONArray.put(obj); 
     } 
    } 

回答

2

添加這個搖籃中您build.gradlecompile 'com.google.code.gson:gson:2.7'

然後

String str = new Gson().toJson(modelList); 
JSONObject jsonObject = new JSONObject(str); 
+0

這對我很好,謝謝 – Daniele

2

你可以嘗試這樣的:

public void saveArrayListtoJSON(ArrayList<Model> modelList) { 
     JSONArray myJSONArray = new JSONArray(); 
     JSONObject obj = new JSONObject(); 
     for(Model model : modelList){ 
      try { 
       obj.put("key", model); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
      myJSONArray.put(obj); 
     } 
    } 

恢復任何錯誤。

1

您也可以使用gson,並將arraylist作爲參數。但要carfull模型的所有元素必須是可序列化,如果不使用瞬態刪除對象,它是不是在你的模型序列化

Gson - putting and getting ArrayList of composite objects

看看這裏: Google Gson - deserialize list<class> object? (generic type)

+0

感謝您的回答蒂莫。你能否提供一個關於如何使用Gson來保存和檢索arrayList的例子? 'List modelList = new Gson()。fromJson(jsonArray,Model.class);'不適用於我。我得到'不兼容的類型' – Daniele

+0

http://stackoverflow.com/questions/5554217/google-gson-deserialize-listclass-object-generic-type或Model [] models = new Gson()。fromJson(jsonArray,Model [] 。類); – Timo

1

你可以試試下面的代碼:

public void saveArrayListtoJSON(ArrayList<Model> modelList) { 
    JSONArray myJSONArray = new JSONArray(); 
     JSONObject obj = new JSONObject(); 
     JSONArray array = new JSONArray(); 
     for (Model model:modelList) { 
      array.put(model.getJson()); 
     } 
     obj.put("key", array); 
     myJSONArray.put(obj); 
    } 
} 

我假設方法的getJSON()是您的方法,該方法返回JSON對象,本模型對象

1

您可以使用GSON來的ArrayList轉換成JSON數組

Gson gson = new Gson(); 
String json = gson.toJson(yourArraylist);