【问题标题】:Retrofit - java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT改造 - java.lang.IllegalStateException:应为 BEGIN_ARRAY 但为 BEGIN_OBJECT
【发布时间】:2016-04-27 08:12:24
【问题描述】:

我正在尝试解析我自己的 JSON,但得到 JSONSyntaxException,这是我的 JSON 的外观:

{
    "type":"success",
    "value":[
        {
            "id":1,
            "title":"Title - 1",
         "name":{
            "first":"First - 1",
            "last":"Last - 1"
         },
            "hobbies":[
                "Writing Code - 1",
            "Listening Music - 1"
            ]
        },
       .....
    ]
}

日志说:

E/app.retrofit_chucknorries.MainActivity$2: ERROR: com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT 
at line 7 column 12 path $.value[0].name
01-21 12:41:52.156 28936-28936/app.retrofit_chucknorries 
W/System.err: retrofit.RetrofitError: com.google.gson.JsonSyntaxException: 
java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT 
at line 7 column 12 path $.value[0].name

我在哪里 mistake ? 我只是根据我的 requirement and classes 做了一些小的修改,否则一切都与原始代码中的几乎相同 Value.java:

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

import java.util.ArrayList;
import java.util.List;

public class Value {

    @SerializedName("id")
    @Expose
    private Integer id;

    @SerializedName("title")
    @Expose
    private String title;

    @SerializedName("hobbies")
    @Expose
    private List<String> hobbies = new ArrayList<String>();

    @SerializedName("name")
    @Expose
    private List<Name> name = new ArrayList<Name>();

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public List<Name> getName() {
        return name;
    }

    public void setName(List<Name> name) {
        this.name = name;
    }

    public List<String> getHobbies() {
        return hobbies;
    }

    public void setHobbies(List<String> hobbies) {
        this.hobbies = hobbies;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

【问题讨论】:

    标签: java android json gson retrofit


    【解决方案1】:

    在你的 Master.java 类中,你的名字不是一个数组!

    private List<Name> name = new ArrayList<Name>();
    

    改为此并尝试:

     private Name name;
    

    实际上通过查看异常的日志你可以知道这一点。

    【讨论】:

    • 日志说:“BEGIN_ARRAY 但在第 7 行是 BEGIN_OBJECT”,因为您的 Json 的第 7 行应该是这一行:“name”:{
    • 是的,谢谢你我做错了。我勾选了有用,将在 5 分钟内接受,我可以问一个问题吗?
    • 查看上面的更新截图,我想知道如何从 JSON 中获取爱好和姓名.....
    • 获取姓名:for(Value value : values) {String name = value.getName()}
    • 但我使用了两种不同的 - 名字和姓氏的不同文本视图,请查看上面的屏幕。
    猜你喜欢
    • 2020-02-03
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2020-02-10
    • 2020-11-15
    • 2018-04-24
    • 1970-01-01
    • 2015-06-09
    相关资源
    最近更新 更多