java - GSON : Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

标签 java android json retrofit jsonexception

在进行改造时,我使用了http://www.jsonschema2pojo.org这个网站将json转换为POJO。但是我在解析 JSON 时遇到了错误,如下所示。它说预期为 BEGIN_OBJECT,但实际为 BEGIN_ARRAY

[
  {
    "uuid": "12e26270-b506-11e9-ad81-5f542bb63d66",
    "first_name": "Nohar",
    "last_name": "Kumar",
    "title": "Premier League Player",
    "gender": "N/A",
    "date_of_birth": null,
    "relationship_status": null,
    "fav_quote": null,
    "best_achievement": null,
    "experience": null,
    "skills": null,
    "height": null,
    "weight": null,
    "about": null
  }
]

这是我的模态类,用于 json 到 POJO。

public class UserAboutModel {
    @SerializedName("uuid")
    @Expose
    private String uuid;
    @SerializedName("first_name")
    @Expose
    private String firstName;
    @SerializedName("last_name")
    @Expose
    private String lastName;
    @SerializedName("title")
    @Expose
    private String  title;
    @SerializedName("gender")
    @Expose
    private String gender;
    @SerializedName("date_of_birth")
    @Expose
    private String  dateOfBirth;
    @SerializedName("relationship_status")
    @Expose
    private String  relationshipStatus;
    @SerializedName("fav_quote")
    @Expose
    private String  favQuote;
    @SerializedName("best_achievement")
    @Expose
    private String bestAchievement;
    @SerializedName("experience")
    @Expose
    private String experience;
    @SerializedName("skills")
    @Expose
    private String skills;
    @SerializedName("about")
    @Expose
    private String about;

    public String getUuid() {
        return uuid;
    }

    public void setUuid(String uuid) {
        this.uuid = uuid;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

    public String getTitle() {
        return title;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getDateOfBirth() {
        return dateOfBirth;
    }

    public void setDateOfBirth(String dateOfBirth) {
        this.dateOfBirth = dateOfBirth;
    }

    public String getRelationshipStatus() {
        return relationshipStatus;
    }

    public void setRelationshipStatus(String relationshipStatus) {
        this.relationshipStatus = relationshipStatus;
    }

    public String getFavQuote() {
        return favQuote;
    }

    public void setFavQuote(String favQuote) {
        this.favQuote = favQuote;
    }

    public String getBestAchievement() {
        return bestAchievement;
    }

    public void setBestAchievement(String bestAchievement) {
        this.bestAchievement = bestAchievement;
    }

    public String getExperience() {
        return experience;
    }

    public void setExperience(String experience) {
        this.experience = experience;
    }

    public String getSkills() {
        return skills;
    }

    public void setSkills(String skills) {
        this.skills = skills;
    }

    public String getAbout() {
        return about;
    }

    public void setAbout(String about) {
        this.about = about;
    }
}

这里我调用方法来获取响应。

private void getUserAbout() {

    apiInterface = APIClient.getClient().create(ApiInterface.class);
    SharedPreferences sp = getSharedPreferences("UserData", Context.MODE_PRIVATE);
    String token = sp.getString("User_Token", "");

    Log.v("working", "working");

    Call<UserAboutModel> call = apiInterface.userAboutBasic(currentUserUuid, "Bearer " + token);
    call.enqueue(new Callback<UserAboutModel>() {
        @Override
        public void onResponse(Call<UserAboutModel> call, Response<UserAboutModel> response) {

            if (response.isSuccessful()) {

                String name = response.body().getFirstName() + " " + response.body().getLastName();

                SharedPreferences pref = getSharedPreferences("UserAbout", Context.MODE_PRIVATE);
                SharedPreferences.Editor editor = pref.edit();

                Log.v("NAme", name);
                Log.v("Title", response.body().getTitle());

                editor.putString("UserName", name);
                editor.putString("UserTitle", response.body().getTitle());
                editor.putString("UserDOB", response.body().getDateOfBirth());
                editor.putString("UserFAvQuote", response.body().getFavQuote());
                editor.putString("UserSkill", response.body().getSkills());
                editor.putString("UserGender", response.body().getGender());
                editor.putString("UserRelationshipStatus", response.body().getRelationshipStatus());
                editor.putString("UserExperience", response.body().getExperience());
                editor.putString("UserBestAchievment", response.body().getBestAchievement());
                editor.putString("UserCategory", primarySports.getText().toString());
                editor.putString("UserSports", response.body().getExperience());
                editor.apply();


            } else {
                try {
                    JSONObject jObjError = new JSONObject(response.errorBody().string());
                    Toast.makeText(getApplicationContext(), jObjError.getString("message"), Toast.LENGTH_LONG).show();
                } catch (Exception e) {
                    Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
                }
            }
        }

        @Override
        public void onFailure(Call<UserAboutModel> call, Throwable t) {
            call.cancel();

            Log.d("TAG", t.toString());
        }
    });
}

这是日志详细信息

D/OkHttp: [{"uuid":"12e26270-b506-11e9-ad81-5f542bb63d66","first_name":"Nohar","last_name":"Kumar","title":"Premier League Player","gender":"N\/A","date_of_birth":null,"relationship_status":null,"fav_quote":null,"best_achievement":null,"experience":null,"skills":null,"height":null,"weight":null,"about":null}]


D/TAG: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

谁能帮帮我吗?如何解决这个错误?

最佳答案

您从服务器获得的响应是​​ UserAboutModel 的列表。但是,在您的代码中,您需要单个数据。我认为该函数应该如下所示。

public void onResponse(Call<UserAboutModel> call, Response<List<UserAboutModel>> response) {
    // Now take the first element from the response list 
    // and then do the rest of your work
}

而不是 Response<UserAboutModel>使用Response<List<UserAboutModel>>这样它就告诉函数需要一个 UserAboutModel 的列表。

希望有帮助!

关于java - GSON : Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57777070/

相关文章:

ruby-on-rails - 给定一个 json 对象,如何在 rails 中遍历该对象

java - 深堆栈的异常抛出性能

java - 取消 ThreadPoolExector 中的等待任务

android - 如何移植 android 以在满足 android 最低设备要求的 lg gt350 手机上运行

java - 仅从第二个请求获取值

c# - 用于深层嵌套对象的自定义 Json 序列化程序

java - 工作线程到工作线程通信

java - Javascript 构造函数与 Java 中的类或接口(interface)等效/相似吗

Android 全屏 Activity 错误

java - 将 onclick 设置为 listview/json 时出错