2016-05-21 8 views
2

サーバから受信したJSONの解析に問題があります。モデルでは、私が持っている:LoganSquareで配列内のネストされたオブジェクトを解析する

@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にオブジェクトを抽出するために、どのように?

@JsonObjectアノテーションに「スキル」名を設定する可能性はありますか?

答えて

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() 
    } 
0

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

非常に簡単かつ迅速にこのコードを試してみて、今、次のコード

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

を使用してJSONを解析してください。ここにカスタムクラスがあります

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; 
    } 
} 
関連する問題