【问题标题】:Using GSON giving error expected BEGIN_ARRAY but was STRING使用 GSON 给出错误预期 BEGIN_ARRAY 但为 STRING
【发布时间】:2012-04-20 03:47:06
【问题描述】:

一个示例 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[] data),因为服务返回多个位置,尽管我在上面显示的示例中只包含了一个。非常感谢任何有关为什么会发生这种情况的帮助。我在这里查看了一些类似的错误,但提供的修复似乎都不适合我。

【问题讨论】:

    标签: java android json gson


    【解决方案1】:
    {
        "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;
        }
    }
    

    这是因为当您使用 Gson 解析这种类型的 Json 时,您的字符串以 [ 开头,然后您需要像我喜欢的那样为其添加一个标签前缀({"finally": your data })。

    实际上 Gson 试图映射标签及其值,但在您的情况下,您的 [ 不包含 Gson 可以映射的标签。

    【讨论】:

    • 我会试试这个。但是,我认为这可能与地址有关,因为我已经解析了上面显示的形式的类似数据而没有添加标签前缀。不过,感谢您的意见,我将尝试此方法并告诉您它是否有效。
    • 我确实设法使用这种方法让它工作。我不太清楚为什么其他方法会出错。感谢您的帮助
    • 嗨,我知道这是非常古老的,但我没有同样的问题,你能解释一下你的代码吗?解析命令在哪里? mainData.class 是为解析器传递的参数吗?
    • 如果我有一个未命名的 json 数组怎么办?我如何使用 gson 解析它?
    • @KaveeshKanwal 一些提示rishabhsays.wordpress.com/2011/02/24/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2018-11-11
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多