我有一个实现 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"]
答案 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);
}