2012-04-20 170 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但在上面的代碼中提到行字符串。我不確定在我設立班級的方式上是否有問題。注意:我使用的是數組(LocationData [] data),因爲服務返回了多個位置,儘管在上面的示例中我只包含了一個。任何幫助,爲什麼發生這是非常讚賞。我已經看過這裏的一些類似錯誤,但沒有提供任何修復似乎適用於我。

回答

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是:

public class mainData { 

    public List<LocationData> finally; 

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

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

那是因爲你的字符串開始[當你分析這種類型的Json與GSON的,那麼你需要一個標籤前綴到它只是我像這樣({"finally": your data })。

其實GSON試圖映射標籤和它的價值,但在你的情況你[犯規包含標籤由GSON可以映射。

+0

我要試試這個。不過,我認爲它可能是做的地址我已經解析沒有前綴的標籤上面顯示的形式類似的數據。感謝您的意見,但我會嘗試這個,並讓它知道它是否有效。 – kushaldsouza 2012-04-20 04:15:21

+0

我確實設法使用這種方法來使它工作。我不太清楚爲什麼其他方法會給出錯誤。感謝您的幫助 – kushaldsouza 2012-04-20 11:11:19

+0

嗨,我知道這是非常老了,但我有短了同樣的問題,你能解釋一下你的代碼位?解析命令在哪裏進行? mainData.class是解析器傳遞的參數嗎? – 2015-06-11 06:40:39

相關問題