2

我在解析从服务器接收到的 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"
         }
      }
   ]
}

问题是:如何在不嵌套附加类(Skill)的情况下将 Skill 对象提取到 ArrayList 中?

也许有可能在 @JsonObject 注释上设置“技能”名称?

4

2 回答 2

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()
    }
于 2016-05-21T11:15:39.350 回答
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;
    }
}
于 2016-05-21T11:37:08.080 回答