通过LoganSquare解析数组中的嵌套对象

时间:2016-05-21 11:01:04

标签: android json logan-square

我在解析从服务器收到的JSON时遇到问题。在我的模型中:

@JsonField(name = "skills")
private ArrayList<Skill> skills;

有字段:

@JsonObject
public class Skill {
    @JsonField
    private int skillID;
    @JsonField
    private String name;
    ...
}

ArrayList获取正确的对象数,但其中的所有字段都为空。

JSON看起来像:

{
   "skills":[
      {
         "skill":{
            "skillID":"1",
            "name":"foo"
         }
      },
      {
         "skill":{
            "skillID":"2",
            "name":"bar"
         }
      }
   ]
}

问题是:如何在不嵌套其他类(技能)的情况下将技能对象提取到ArrayList中?

也许有可能设置&#34;技能&#34; @JsonObject注释上的名称?

2 个答案:

答案 0 :(得分:0)

这里我为解析提供了简单的解决方案:

ArrayList<Skill> skills;
    try{
    JSONObject jobj=new JSONObject(str);
    JSONArray jsar=jobj.getJSONArray("skills");
    for(int i=0;i<jsar.length();i++){
        JSONObject skobj=jsar.getJSONObject(i);
        JSONObject sksub=skobj.getJSONObject("skill");
        //in skill class objest assign name & Id using obj.getstring("Name");
        skills.add(new skill(sksub));
    }
    }catch(Exception e){
        e.printStackTrace()
    }

答案 1 :(得分:0)

请非常简单快速地尝试此代码

  ArrayList<Skill> skillsArrayList = new ArrayList<>();

现在使用以下代码解析Json

 try {
        skillsArrayList=new ArrayList<>();
        JSONObject object=new JSONObject(jsonString);

        JSONArray array=object.getJSONArray("skills");
        for (int i=0;i<array.length();i++){
            JSONObject jsonObject=array.getJSONObject(i).getJSONObject("skill");

            skillsArrayList.add(new Skill(jsonObject.getInt("skillID"),jsonObject.getString("name")));
        }

        Log.e("skillItemCount",skillsArrayList.size()+"");

    } catch (JSONException e) {
        e.printStackTrace();
    }

这是我的自定义类

 class Skill{
    int id;
    String name;

    public Skill(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}