본문 바로가기

소프트웨어 /안드로이드[Java]

[Android] Retrofit 에러 - Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

반응형

Retrofit + RxJava + OKHTTP를 이용해서 Json 데이터를 가져오던 중 다음과 같은 에러가 발생했다.

 

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

 

해당 에러는 Json데이터를 파싱할 때 형식이 잘못되었을 경우에 발생하는 에러이다.

 

내가 받아오려는 데이터는 아래와 같이 처음부터 배열형식(Array)으로 받아오기 때문에 에러가 발생했다.

[
    {
        "id": 1,
        "name": "Minsu",
        "age": 25
    },
    {
        "id": 2,
        "name": "Parksuri",
        "age": 25
    },
    {
        "id": 3,
        "name": "Jenni",
        "age": 22
    }
    ...
 ]

 

데이터를 추출하기 위한 클래스를 아래와 같이 만들고 사용할 때 List<GetList>로 사용하면 된다.

public class GetList {
    @SerializedName("id")
    @Expose
    private int id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("age")
    @Expose
    private int age;

    public int geId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

}