2011-10-24 3 views
0

나는 내 안드로이드 응용 프로그램에서 호출이 JSON 데이터와 문자열을 받고 한 ASP.NET WebService를 가지고 : 나는 다음과 같습니다 StationInfo라는 개체가GSON 안드로이드 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" 
    }, ..... ] 
} 

를 :

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 

나는 개체 "d"와 일치하는 개체가 필요하지만 어떻게해야합니까?

+0

시도하는 것은 추가하는 새로운 클래스'클래스 DotNetDataModel {공공 DataModel이 [] D; }'이 다음과 같이 사용한다. DotNetDataModel [] resp = gson.fromJson (result, DotNetDataModel.class); DataModel [] stationInfos = resp.d; ' – Selvin

답변

1

대신 GSON를 사용하는 나는 내장 JSON 클래스를 구현하는 방법을 제안 : "결과는"주 JSON 개체는 루프를 사용할 필요가 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

퀘스트 : "내가 선택해야하는 오토바이를 살까?" ... Ans .: "오토바이를 사지 말고 차를 사 ..." – Selvin

+2

@Selvin 이미 자동차가있는 경우 (내장 클래스) 오토바이 (타사 API)를 빌려야하는 이유는 무엇입니까? –

+0

어쩌면 그는 교통 정체 (코딩없이 특정 클래스에 바인딩)에 갇혀 있지 않을 수도 있습니다. – Selvin

0

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 
}