2017-10-14 3 views
0

Le JSON:Pourquoi GSON me donne-t-il une erreur lors de l'analyse d'un tableau de tableau d'objets?

[{"DataContainer": { 
     "ShoppingDetails": [ 
     [ 
      { 
      "Value": "3", 
      "Name": "Price" 
      }, 
      { 
      "Value": "XAV-13-9LO", 
      "Name": "Item Code" 
      } 
     ], 
     [ 
      { 
      "Value": "9", 
      "Name": "Price" 
      }, 
      { 
      "Value": "WEB-13-9XH", 
      "Name": "Item Code" 
      } 
     ] 
     ] 
    } 
}] 

J'ai déjà un DataContainer de classe:

public class DataContainer extends WebResp{ 
    @SerializedName("ShoppingDetails") 
    private ShoppingDetails[] shoppingDetails; 

    public ShoppingDetails[] getShoppingDetails() { 
     return shoppingDetails; 
    } 

    public void setShoppingDetails(ShoppingDetails[] shoppingDetails) { 
     this.shoppingDetails= shoppingDetails; 
    } 
} 

et ShoppingDetails classe:

public class ShoppingDetails{ 
    private Field[] field; 

    public Field[] getField() { 
     return field; 
    } 

    public void setField(Field[] field) { 
     this.field= field; 
    } 
} 

Mais malheureusement, je fini avec com.google.gson .JsonSyntaxException: java.lang.IllegalStateException: BEGIN_OBJECT attendue mais était BEGIN_ARRAY à la ligne 61 colonne 10 chemin $ [0] .DataContainer.ShoppingDet ails [0]

Quelqu'un pourrait-il me diriger dans la bonne direction pour mapper ce JSON à un objet Java en utilisant GSON?

+3

Vous avez déclaré 'shoppingDetails' en tant que tableau mais c'est un tableau de tableau dans votre JSON. –

+1

* "Pourquoi GSON me donne-t-il une erreur lors de l'analyse d'un ** tableau de tableau ** d'objets?" * Votre titre dit tout. "** tableau de tableau **". 'shoppingDetails' doit être' Field [] [] ', c'est-à-dire un tableau de tableau de' Field'. Et 'Field' devrait alors être une classe avec deux champs' String' annotés avec '@SerializedName (" Value ")' et '@SerializedName (" Name ")'. – Andreas

+1

Ah! Merci beaucoup à vous deux. C'est vraiment une erreur d'origine. Y a-t-il un moyen d'accepter un commentaire comme réponse? – redflour

Répondre

0
  • ajouter Databean

  • utilisation Gson pour l'analyser

1.DataBean

public class DataBean { 

private DataContainerBean DataContainer; 

public DataContainerBean getDataContainer() { 
    return DataContainer; 
} 

public void setDataContainer(DataContainerBean DataContainer) { 
    this.DataContainer = DataContainer; 
} 

public static class DataContainerBean { 
    /** 
    * Value : 3 
    * Name : Price 
    */ 

    private List<List<ShoppingDetailsBean>> ShoppingDetails; 

    public List<List<ShoppingDetailsBean>> getShoppingDetails() { 
     return ShoppingDetails; 
    } 

    public void setShoppingDetails(List<List<ShoppingDetailsBean>> ShoppingDetails) { 
     this.ShoppingDetails = ShoppingDetails; 
    } 

    public static class ShoppingDetailsBean { 
     private String Value; 
     private String Name; 

     public String getValue() { 
      return Value; 
     } 

     public void setValue(String Value) { 
      this.Value = Value; 
     } 

     public String getName() { 
      return Name; 
     } 

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

2.Utiliser Gson tp parse

Gson gson = new Gson(); 
try { 
    JSONArray jsonArray = new JSONArray(response); 
    for (int i = 0; i < jsonArray.length(); i++) { 
     DataBean dataBean = gson.fromJson(jsonArray.getJSONObject(i).toString(),DataBean.class); 
    } 
} catch (JSONException e) { 
    e.printStackTrace(); 
}