2016-05-21 4 views
2

J'ai un problème d'analyse de JSON reçu du serveur. Dans le modèle je:Analyse d'objets imbriqués à l'intérieur d'un tableau par LoganSquare

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

qui a des champs:

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

Le ArrayList obtient le nombre correct d'objets mais tous les champs à l'intérieur sont les valeurs NULL.

JSON ressemble:

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

La question est la suivante: Comment extraire les objets compétences dans ArrayList sans imbrication classe supplémentaire (compétences)?

Peut-être qu'il est possible de définir le nom "skill" sur l'annotation @JsonObject?

Répondre

0

Ici, je mets une solution facile pour l'analyse syntaxique:

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

S'il vous plaît essayer ce code très simple et rapide

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

et maintenant analyser le JSON en utilisant le code suivant

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

et voici ma classe personnalisée pour cela

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