Ошибка «Ожидаемый объект BEGIN_OBJECT, но был СТРОКОЙ», несмотря на то, что JSON действителен

#java #json #retrofit

#Ява #json #переоборудование

Вопрос:

В настоящее время я работаю над проектом в конце семестра. Это приложение для Android, которое будет функционировать как музыкальная база данных и магазин, и я использую API MusicBrainz для получения информации о релизах и исполнителях.

К сожалению, я застрял на очень важной части моего проекта: самом API. Я продолжаю получать эту ошибку

 java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 1 path $  

Оглядевшись в Интернете, я обнаружил, что это произошло из-за того, что сам JSON был плохо написан, однако, посмотрев еще раз и используя валидатор JSON, я понял, что это не так. Вот json, который я пытаюсь получить

 {  "ipis": [],  "type": "Group",  "life-span": {  "end": "2017-02-04",  "begin": "1969",  "ended": true  },  "area": {  "name": "United Kingdom",  "id": "8a754a16-0027-3a29-b6d7-2b40ea0481ed",  "type": null,  "disambiguation": "",  "iso-3166-1-codes": ["GB"],  "type-id": null,  "sort-name": "United Kingdom"  },  "disambiguation": "",  "type-id": "e431f5f6-b5d2-343d-8b36-72607fffb74b",  "isnis": ["0000000123694269"],  "name": "Black Sabbath",  "begin_area": {  "name": "Birmingham",  "type": null,  "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a",  "disambiguation": "",  "type-id": null,  "sort-name": "Birmingham",  "iso-3166-2-codes": ["GB-BIR"]  },  "id": "5182c1d9-c7d2-4dad-afa0-ccfeada921a8",  "gender-id": null,  "end-area": {  "name": "Birmingham",  "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a",  "type": null,  "disambiguation": "",  "type-id": null,  "iso-3166-2-codes": ["GB-BIR"],  "sort-name": "Birmingham"  },  "begin-area": {  "name": "Birmingham",  "type": null,  "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a",  "disambiguation": "",  "type-id": null,  "sort-name": "Birmingham",  "iso-3166-2-codes": ["GB-BIR"]  },  "country": "GB",  "sort-name": "Black Sabbath",  "gender": null,  "end_area": {  "name": "Birmingham",  "id": "226c4dca-ef2a-4d4b-ba25-4118d116557a",  "type": null,  "disambiguation": "",  "type-id": null,  "iso-3166-2-codes": ["GB-BIR"],  "sort-name": "Birmingham"  } }  

и вот часть моего кода:

Мой основной метод:

 public class MainActivity extends AppCompatActivity {  private static final String TAG = "Mainactivity";   JSONPlaceHolderArtist artistJSON;  Button b;   @Override  protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);   artistJSON = MusicBrainzAPI.getClient().create(JSONPlaceHolderArtist.class);  b = findViewById(R.id.button);  b.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View view) {  getArtist();  }  });  }   private void getArtist() {  Calllt;ArtistAPIgt; call = artistJSON.getArtist("5182c1d9-c7d2-4dad-afa0-ccfeada921a8");  call.enqueue(new Callbacklt;ArtistAPIgt;() {  @Override  public void onResponse(Calllt;ArtistAPIgt; call, Responselt;ArtistAPIgt; response) {  Log.e(TAG,"on response: "   response.body());  }   @Override  public void onFailure(Calllt;ArtistAPIgt; call, Throwable t) {  Log.i(TAG, "on failure: "   t.getLocalizedMessage());  }  });  } }  

Класс ArtistAPI:

 public class ArtistAPI {   String id, name, country, begin, end;  Boolean ended;   public String getArtistID() {  return id;  }   public String getArtistName() {  [...]  

Интерфейс дооснащения:

 public interface JSONPlaceHolderArtist {   @GET("/artist/{id}/name?fmt=json")  Calllt;ArtistAPIgt; getArtist(@Path("id") String id); }  

и API:

 public class MusicBrainzAPI {   private static final String BASE_URL = "https://musicbrainz.org/ws/2/";  private static Retrofit retrofit = null;   public static Retrofit getClient() {  if (retrofit == null) {  Gson gson = new GsonBuilder().setLenient().create();  retrofit = new Retrofit.Builder().baseUrl(BASE_URL).  addConverterFactory(GsonConverterFactory.create(gson)).build();  }  return retrofit;  } }  

Какая-нибудь помощь? Заранее спасибо!

Комментарии:

1. Не включайте ссылки на дерьмо; мы предполагаем, что это попытка передать нам вирус. Упростите JSON и включите его в вопрос.

2. извини за это, исправлено.