2011-10-24 6 views
0

私は私が私のAndroidアプリから呼び出して、このJSONデータで文字列を抜け出す1つの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 

私はオブジェクト "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

Quest:"私はワナはバイクを買うのですが、どちらを選ぶべきですか? " ... Ans .:「バイクを買わないで、車を買って...」 – 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 
} 
関連する問題