2012-04-20 9 views
2

例JSONオブジェクトは以下に示した:使用GSON与えるエラーがBEGIN_ARRAYを期待しかしSTRING

[{"Title":"John Doe","Address":{"AddressLines":["The Place","123 New Place","London","England"],"Postcode":"NW7 XXY"},"Telephone":"0","Email":"","Latitude":51.5024472101345,"Longitude":-0.557585646554,"Easting":500623,"Northing":179647}] 

は、上記の目的は、リンクwww.domain.comを介してアクセスされると仮定し、私は表現する次のクラスを持っています次のようにデータ

public class LocationData extends Data{ 

    private Address Address; 
    private String Telephone; 
    private String Email; 
    private String Latitude; 
    private String Longitude; 
    private String Easting; 
    private String Northing; 

    public Address getAddress() { 
     return Address; 
    } 

    public void setAddress(Address address) { 
     Address = address; 
    } 

    public String getTelephone() { 
     return Telephone; 
    } 

    public void setTelephone(String telephone) { 
     Telephone = telephone; 
    } 

    public String getEmail() { 
     return Email; 
    } 

    public void setEmail(String email) { 
     Email = email; 
    } 

    public String getLatitude() { 
     return Latitude; 
    } 

    public void setLatitude(String latitude) { 
     Latitude = latitude; 
    } 

    public String getLongitude() { 
     return Longitude; 
    } 

    public void setLongitude(String longitude) { 
     Longitude = longitude; 
    } 

    public String getEasting() { 
     return Easting; 
    } 

    public void setEasting(String easting) { 
     Easting = easting; 
    } 

    public String getNorthing() { 
     return Northing; 
    } 

    public void setNorthing(String northing) { 
     Northing = northing; 
    } 

} 

そして、アドレスクラスは次のとおりです。

public class Address { 

    public String[] AddressLines; 

    public String Postcode; 

    public String getPostcode() { 
     return Postcode; 
    } 

    public void setPostcode(String postcode) { 
     Postcode = postcode; 
    } 

    public String[] getAddressLines() { 
     return AddressLines; 
    } 

    public void setAddressLines(String addressLines[]) { 
     AddressLines = addressLines; 
    } 


} 

私がしようとすると

LocationData[] data = gson.fromJson(this.locationServiceUrl, LocationData[].class); 
return data; 

を実行するために、私は次のエラーを取得:

期待BEGIN_ARRAYのが、コードの上記の行で文字列でした。私は自分のクラスを設定する方法に何か間違っているかどうかはわかりません。注:私は上に示した例では1含まれているが、サービスが複数の場所を返すので、私は配列(LocationData []データ)を使用しています。なぜこれが起こっているかについての助けは大いに感謝されます。私はここで同様のエラーのいくつかを見てきましたが、提供された修正のどれも私にとってはうまくいかないようです。

答えて

5
{ 
    "finally":[ 
     { 
      "Title":"John Doe", 
      "Address": { 
       "AddressLines":[ 
        "The Place", 
        "123 New Place", 
        "London", 
        "England" 
       ], 
       "Postcode":"NW7XXY" 
      }, 
      "Telephone":"0", 
      "Email":"", 
      "Latitude":51.5024472101345, 
      "Longitude":-0.557585646554, 
      "Easting":500623, 
      "Northing":179647 
     } 
    ] 
} 

と、このJSONをパースするコードされて:あなたはGsonとJSONのこのタイプを解析するとき、あなたの文字列が[で始まるので、それがある

public class mainData { 

    public List<LocationData> finally; 

    public String[] getLocationData() { 
     return AddressLines; 
    } 

    public void setLocationData(List<LocationData> finally) { 
     this.finally = finally; 
    } 
} 

その後、あなたはそれにラベルの前に付ける必要があるちょうど私のような({"finally": your data })。

実はGsonは、ラベルとその値をマッピングしようとしているが、あなたのケースでは、あなたの[ doesntのはGsonをマッピングすることができたことにより、ラベルが含まれています。

+0

私はこれを試してみてくださいものとします。しかし、私は私がラベルを前置することなく、上に示した形式の類似したデータを解析されているように、アドレスとは何かかもしれないと思います。あなたのご意見ありがとうございます、私はこれを試して、それが動作するかどうかを知らせるつもりです。 – kushaldsouza

+0

私はこのメソッドを使用して動作させることができました。他の方法でもエラーが発生する理由はあまりわかりません。あなたの助けをありがとう – kushaldsouza

+0

こんにちは、私はこれは非常に古いであることを知っているが、私は同じ問題の短い持っています、あなたはあなたのコードビットを説明できますか?解析コマンドはどこに行きますか?パーサーに渡すパラメータはmainData.classですか? –

関連する問題