본문 바로가기

Android/에러

Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 1 path $

1. 발생 원인

JSON 포멧 데이터를 GSON 라이브러리를 통해 사용할 때 발생할 수 있는 오류입니다.

2. 해결 방법

retrofit 객체를 만들 때 gson 객체에 속성을 추가해서 설정해주면 됩니다.

먼저 아래처럼 retrofit 객체를 만들어줍니다.

sRetrofit = Retrofit.Builder()
    .baseUrl(API_URL)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create())
    .build()

이때 GsonConvertFactory.create() 부분에 gson 객체를 만들어서 넣어주면 됩니다.

gson 객체는 다음과 같이 만들어줍니다.

val gson : Gson = GsonBuilder()
    .setLenient()
    .create()

이때 setLenient() 속성을 설정해줍니다.

Gson은 원래 RFC 4627에 의해 구체화된 JSON 만 허용할 정도로 엄격합니다(strict)
그러나 setLenient 속성을 설정하면 parser로 하여금 허용을 더 자유롭게 해줍니다.
(By default, Gson is strict and only accepts JSON as specified by RFC 4627 . This option makes the parser liberal in what it accepts.)

이후 만들어준 gson 객체를 retrofit 객체에 설정해주면 됩니다.

sRetrofit = Retrofit.Builder()
    .baseUrl(API_URL)
    .client(client)
    .addConverterFactory(GsonConverterFactory.create(gson))
    .build()

 

728x90
반응형