【问题标题】:from JSONArray to List<CustomClass>从 JSONArray 到 List<CustomClass>
【发布时间】:2014-07-03 17:07:55
【问题描述】:

我有一个实现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 中......

当我从数据库中检索此字符串时,我想将其转换为列表,但我没有成功...

我是怎么做到的:

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

如何将 JSONArray 转换为 List

//EDIT这是我从数据库中检索它们时的样子:

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

【问题讨论】:

标签: android json sqlite arrays


【解决方案1】:

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

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);
   }

【讨论】:

  • 我有一个类似的代码,它丢弃了 ClassCastException ,String cannont be cast to Hop ...
  • 我认为你的逻辑是正确的......我也尝试过这个......但是看看我的 JSON 在 toString 方法之后的样子......可以吗?
  • 我知道......当我从数据库中保存和检索它时似乎有问题:)
  • @MatejŠpilár 所以首先检查从 DB 获取的 jsonArray 是否正确?然后使用我的答案获取对象列表,它将解决您的问题。
  • 问题是在我上面的代码中添加...然后我将 jsonArray 放到 jsonObject 中,toString 与编辑中的相同...我不知道为什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 2018-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多