2017-01-13 53 views
-3

我有这个JSON数据,我想用Android反序列化它,以便将它作为我的类中使用的对象。 我得到这个如下因素的错误:如何反序列化多维数组中的JSON对象

无法读取JSON:无法识别的领域 “card_details”

[ 
    { 
     "id": "9", 
     "cat_id": "CAT-8584ce02f180b57a8c6d66570f696e02", 
     "app_id": "null", 
     "status": "1", 
     "lft": "1", 
     "rgt": "2", 
     "parent_cat_id": "0", 
     "added_date": "2017-01-12 12:41:29", 
     "last_edit_date": "2017-01-12 12:46:09", 
     "language_id": "0", 
     "category_id": "CAT-8584ce02f180b57a8c6d66570f696e02", 
     "name": "Sport", 
     "description": "This is sport category", 
     "image": "notitia/USR-70903638005256656/app-content/cat-img-da1161af03df255a989f8df5fc2e15bd.png", 
     "tags": "", 
     "custom_url": "sport", 
     "card_details": { 
      "nom_carte": "Pinacolada", 
      "prix": "5000", 
      "image": "notitia/USR-44043694343417880/app-content/e0fa7beb401e8fe77727f5a8241ff872.jpg", 
      "validity": "1" 
     } 
    } 
] 

这里是我的AsyncTask来检索数据:

private class HttpRequestTaskCarte extends AsyncTask<Void,Void,Item[]> { 

     @Override 
     protected Item[] doInBackground(Void... params) { 
      try { 
       final String url = "http://domain.com/link.php?target=multi"; 
       RestTemplate restTemplate = new RestTemplate(); 
       restTemplate.getMessageConverters().add(new MappingJackson2HttpMessageConverter()); 
       Item[] greeting = restTemplate.getForObject(url, Item[].class); 
       return greeting; 
      } catch (Exception e) { 

       //Toast.makeText(getActivity(), "Error Loading !", Toast.LENGTH_SHORT).show(); 
       Log.e("MainActivity", e.getMessage(), e); 
      } 

      return null; 
     } 

     protected void onPreExecute(){ 

      progressDialog = new ProgressDialog(getActivity(), 
        R.style.AppTheme_Dark_Dialog); 
      progressDialog.setIndeterminate(true); 
      progressDialog.setMessage("chargement des elements..."); 
      progressDialog.show(); 

     } 

     @Override 
     protected void onPostExecute(Item[] greeting) { 


      Log.d("okokok",""+greeting.length); 

      progressDialog.dismiss(); 

     } 

    } 

这里是我用来反序列化的类:

public class Item { 

    private List<card_details> carte; 

    public String getId() { 
     return id; 
    } 

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

    public String getCat_id() { 
     return cat_id; 
    } 

    public void setCat_id(String cat_id) { 
     this.cat_id = cat_id; 
    } 

    public String getApp_id() { 
     return app_id; 
    } 

    public void setApp_id(String app_id) { 
     this.app_id = app_id; 
    } 

    public String getStatus() { 
     return status; 
    } 

    public void setStatus(String status) { 
     this.status = status; 
    } 

    public String getLft() { 
     return lft; 
    } 

    public void setLft(String lft) { 
     this.lft = lft; 
    } 

    public String getRgt() { 
     return rgt; 
    } 

    public void setRgt(String rgt) { 
     this.rgt = rgt; 
    } 

    public String getParent_cat_id() { 
     return parent_cat_id; 
    } 

    public void setParent_cat_id(String parent_cat_id) { 
     this.parent_cat_id = parent_cat_id; 
    } 

    public String getAdded_date() { 
     return added_date; 
    } 

    public void setAdded_date(String added_date) { 
     this.added_date = added_date; 
    } 

    public String getLast_edit_date() { 
     return last_edit_date; 
    } 

    public void setLast_edit_date(String last_edit_date) { 
     this.last_edit_date = last_edit_date; 
    } 

    public String getLanguage_id() { 
     return language_id; 
    } 

    public void setLanguage_id(String language_id) { 
     this.language_id = language_id; 
    } 

    public String getCategory_id() { 
     return category_id; 
    } 

    public void setCategory_id(String category_id) { 
     this.category_id = category_id; 
    } 

    public String getName() { 
     return name; 
    } 

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

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getImage() { 
     return image; 
    } 

    public void setImage(String image) { 
     this.image = image; 
    } 

    public String getTags() { 
     return tags; 
    } 

    public void setTags(String tags) { 
     this.tags = tags; 
    } 

    public String getCustom_url() { 
     return custom_url; 
    } 

    public void setCustom_url(String custom_url) { 
     this.custom_url = custom_url; 
    } 

    public List<Detail_cartes> getCarte() { 
     return carte; 
    } 

    public void setCarte(List<Detail_cartes> carte) { 
     this.carte = carte; 
    } 


    public static class Detail_cartes{ 
     private String nom_carte ; 
     private String prix ; 
     private String image ; 
     private String validity ; 
    } 

} 
+0

你是如何反序列化? –

+1

可能重复的[如何解析JSON在Java](http://stackoverflow.com/questions/2591098/how-to-parse-json-in-java) – Selvin

+0

card_details是一个JOSNObject –

回答

2
JSONArray array=new JSONArray(your data); 
JSONObject obj=array.getJSONObject(0); 
JSONObject cardDetail=obj.getJSONObject("card_details"); 
0

斐伊川ü可以使用下面的代码:

JSONArray jsonarray = new JSONArray(jsonStr); 
for (int i = 0; i < jsonarray.length(); i++) { 
JSONObject jsonobject = jsonarray.getJSONObject(i); 
String name = jsonobject.getString("name"); 
String url = jsonobject.getString("url"); 

}