2011-10-24 37 views
0

我有我從我的Android應用程序調用和失控的字符串,這個JSON數據一個ASP.NET web服務:GSON的Android JSON parsning錯誤

{ 
    "d": [{ 
     "__type": "Trafikverket_API.Models.Trafiklage", 
     "TagGrupp": "44be2cce-3055-4d22-aaf2-00e098b0422e", 
     "Fran": "Gävle,Uppsala,Stockholm", 
     "Till": "Norrköping,Linköping", 
     "TrafikplatsNamn": "Nyköping C", 
     "VisaAnkomst": "true", 
     "InstalldAnkomst": "false", 
     "InstalldAvgang": "false", 
     "SparangivelseAvgang": "6", 
     "AnmarkningarAvgang": "SJ Regional", 
     "AnnonseratTagId": "249", 
     "SparangivelseAnkomst": "6", 
     "AnmarkningarAnkomst": "SJ Regional", 
     "AnnonseradAnkomstTid": "21:50", 
     "AnnonseradAvgangTid": "21:53", 
     "BeraknadAvgangTid": null, 
     "BeraknadAnkomstTid": null, 
     "AnnonseradTidpunktAvgang": "2011-10-23T21:53:00+02:00" 
    }, { 
     "__type": "Trafikverket_API.Models.Trafiklage", 
     "TagGrupp": "eae407a9-61ba-43f4-9c53-c666c2a3f117", 
     "Fran": "Stockholm,Södertälje", 
     "Till": "Norrköping,Linköping", 
     "TrafikplatsNamn": "Nyköping C", 
     "VisaAnkomst": "true", 
     "InstalldAnkomst": "false", 
     "InstalldAvgang": "false", 
     "SparangivelseAvgang": "6", 
     "AnmarkningarAvgang": "SJ Regional", 
     "AnnonseratTagId": "251", 
     "SparangivelseAnkomst": "6", 
     "AnmarkningarAnkomst": "SJ Regional", 
     "AnnonseradAnkomstTid": "22:52", 
     "AnnonseradAvgangTid": "22:54", 
     "BeraknadAvgangTid": null, 
     "BeraknadAnkomstTid": null, 
     "AnnonseradTidpunktAvgang": "2011-10-23T22:54:00+02:00" 
    }, ..... ] 
} 

我有一個叫StationInfo對象,看起來像這樣:

public class DataModel 
{ 
    public Boolean VisaAnkomst; 
    public String TagGrupp; 
    public String Fran; 
    public String Till; 
    public String TrafikplatsNamn; 
    public Boolean InstalldAnkomst; 
    public Boolean InstalldAvgang; 
    public String SparangivelseAvgang; 
    public String AnmarkningarAvgang; 
    public Integer AnnonseratTagId; 
    public String SparangivelseAnkomst; 
    public String AnmarkningarAnkomst; 
    public String AnnonseradAnkomstTid; 
    public String AnnonseradAvgangTid; 
    public String BeraknadTidpunktAnkomst; 
    public String BeraknadTidpunktAvgang; 
    public String VerkligAnkomstTid; 
    public String VerkligAvgangTid; 
    public String BeraknadAvgangTid; 
    public String BeraknadAnkomstTid; 
    public String AnnonseradTidpunktAvgang; 
    public String VerkligTidpunktAnkomst; 
} 

當我運行此:

Gson gson = new Gson(); 
DataModel[] stationInfos = gson.fromJson(result, DataModel[].class); 

我得到這個異常:

com.google.gson.JsonParseException: Expecting object but found array 

我ges我需要一些匹配對象「d」的對象,但我該怎麼做?

+0

嘗試添加新的類'類{DotNetDataModel公衆的DataModel [] d; }'並像這樣使用'DotNetDataModel [] resp = gson.fromJson(result,DotNetDataModel.class); DataModel [] stationInfos = resp.d;' – Selvin

回答

1

而不是使用GSON的,我建議你實現內置JSON類:

JSONObject obj; 
try { 
    obj = new JSONObject("yourJsonData"); 
    JSONArray objD = obj.getJSONArray("d"); // getting your "d" array from json data   
    JSONObject subObject; 

    for(int i=0; i<objD.length(); i++) 
    { 
     subObject = objD.getJSONObject(i); // getting one by one objects from Array 
    } 
} catch (JSONException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
+1

任務:「我買了一輛摩托車,我應該選擇哪一輛?」 ...回答:「不要買摩托車,買車...」 – Selvin

+2

@Selvin如果你已經有車(內置的課程),爲什麼要去借用摩托車(第三方API)。 –

+0

也許他不會卡在交通堵塞(綁定到特定的類沒有編碼) – Selvin

0

如果「結果」是你的主要JSON對象,那麼你必須使用循環JSON數組中的所有對象像下面

for(int i=0;i<result.getJSONArray("d").length();i++) 
     { 
      DataModel[] obj=new Gson().fromJson(result.getJSONArray("d").getJSONObject(i).toString(), VteamsListing.class); 
     } 
0

你的陣列是「d」變量中,你需要提取它首先

1

您需要調整您的類的結構,將數據保持到的JSON響應。由於「d」是包含元素的數組,因此您在DataModel類中聲明的所有內容都必須是上級類的List項的「一部分」,例如響應

public class Response { 
    List<DataModel> data; //with DataModel as defined by you 
} 

用法:

Response result = gson.fromJson(json_responseString, Response.class); 
for (Response.DataModel entry: result.data) { 
    //do something with each entry 
}