2

JSON オブジェクトの例を以下に示します。

[{"Title":"John Doe","Address":{"AddressLines":["The Place","123 New Place","London","England"],"Postcode":"NW7 XXY"},"Telephone":"0012345","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[] データ) を使用しているのは、上記の例では 1 つの場所を含めただけですが、サービスが複数の場所を返すためです。なぜこれが起こっているのかについての助けは大歓迎です。ここで同様のエラーをいくつか調べましたが、提供された修正はどれもうまくいかないようです。

4

1 に答える 1

5
{
    "finally":[
        {
            "Title":"John Doe",
            "Address": {
                "AddressLines":[
                    "The Place",
                    "123 New Place",
                    "London",
                    "England"
                ],
                "Postcode":"NW7XXY"
            },
            "Telephone":"0012345",
            "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がマップできるLabelが含まれていません。

于 2012-04-20T04:01:43.393 に答える