从JSONArray到List <customclass> </customclass>

时间:2014-07-03 17:07:56

标签: android json sqlite arrays

我有一个实现 Serializable ...

的类
public class Hop implements Serializable {
    private static final long serialVersionUID = 1L;

    public double d1;           
    public double d2;
    public Date date1;      
    public String string;   
    public Date date2;      
}

我拥有的是啤酒花列表...

List<Hop> hops = new ArrayList<Hop>();
hops.add(hop1);
hops.add(hop2);

JSONObject json = new JSONObject();
json.put("uniqueArrays", new JSONArray(hops));
String arrayList = json.toString();

然后我在SQLite中保存了这个String以及其他很多东西......

当我从DB中检索这个String时,我想将它转换为List但是我没有成功...

我如何:

JSONObject json = new JSONObject(arrayList );
JSONArray items = json.optJSONArray("uniqueArrays");

如何将 JSONArray 转换为列表

//编辑这是我从DB检索它们时的样子:

 JSONObject: {"uniqueArrays":["com.myapp.app.Hop@41c18ce8"]}
 JSONArray :["com.myapp.app.Hop@41c18ce8"]

1 个答案:

答案 0 :(得分:1)

要从jsonArray获取对象列表,首先从JSONObject获取jsonArray,然后从该JSONobject获取类对象。 所以使用下面的代码:

JSONArray items = json.optJSONArray("uniqueArrays");
List<Hop> hopsData = new ArrayList<Hop>();

for (int i=0;i<items.length();i++){ 
    JSONObject jObj = items.getJSONObject(i);
    Hop  objHop = new Hop();
    objHop.d1 =jObj.getDouble("d1");
    objHop.d2 =jObj.getDouble("d2");
    objHop.date1 =Date.parse(jObj.getString("date1"));
    objHop.string =jObj.getString("string");
    objHop.date2 = Date.parse(jObj.getString("date2"));
    hopsData.add(objHop);
} 

修改

你从Arraylist转换为jsonarray是错误的。所以以这种方式将arraylist转换为jsonarray。

List<Hop> hops = new ArrayList<Hop>();
hops.add(hop1); 
hops.add(hop2);
JSONArray jsonArray = new JSONArray();

for(Hop objHop : hops){
       JSONObject jsonObject= new JSONObject();
       jsonObject.put("d1", objHop.d1);
       jsonObject.put("d2", objHop.d2);
       jsonObject.put("date1", String.valueOf(objHop.date1));
       jsonObject.put("string", objHop.string);
       jsonObject.put("date2", String.valueOf(objHop.date2));
       jsonArray.put(jsonObject);
   }