2014-02-19 2 views
4

У меня есть следующий канал в формате JSON:Чтение JSON с Модернизированный

{ 
    collection_name: "My First Collection", 
    username: "Alias", 
    collection: { 
    1: { 
     photo_id: 1, 
     owner: "Some Owner", 
     title: "Lightening McQueen", 
     url: "http://hesp.suroot.com/elliot/muzei/public/images/randomhash1.jpg" 
     }, 
    2: { 
     photo_id: 2, 
     owner: "Awesome Painter", 
     title: "Orange Plane", 
     url: "http://hesp.suroot.com/elliot/muzei/public/images/randomhash2.jpg" 
     } 
    } 
} 

То, что я пытаюсь сделать, это получить содержимое коллекции - photo_id, владельца, название и URL. У меня есть следующий код, но я получаю ошибки GSON JSON:

@GET("/elliot/muzei/public/collection/{collection}") 
    PhotosResponse getPhotos(@Path("collection") String collectionID); 

    static class PhotosResponse { 
     List<Photo> collection; 
    } 

    static class Photo { 
     int photo_id; 
     String title; 
     String owner; 
     String url; 
    } 
} 

Я думал, что мой код был правильным, чтобы получить корм JSON, но я не так уверен. Любая помощь оценивается.

Ошибки я получаю:

Caused by: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 75 

Однако я изо всех сил, чтобы понять, как использовать библиотеку GSON

+0

Какая ошибка вы получаете? Логкат, пожалуйста? – NasaGeek

+0

В принципе, ключевая строка: вызвана: retrofit.converter.ConversionException: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидается BEGIN_ARRAY, но BEGIN_OBJECT в строке 1 колонке 75 – K20GH

+0

в порядке, поэтому я не невероятно знакомый с gson, но похоже, что он ожидал массив 'Photos', а не' List' из них. – NasaGeek

ответ

5

Ваш JSON не является действительным.

GSON ждет BEGIN_ARRAY "[" после collection:, потому что ваш PhotosResponse класса определить массив Фото List<Photo> но нашел BEGIN_OBJECT "{", он должен быть

{ 
    "collection_name": "My First Collection", 
    "username": "Alias", 
    "collection": [ 
     { 
      "photo_id": 1, 
      "owner": "Some Owner", 
      "title": "Lightening McQueen", 
      "url": "http://hesp.suroot.com/elliot/muzei/public/images/randomhash1.jpg" 
     }, 
     { 
      "photo_id": 2, 
      "owner": "Awesome Painter", 
      "title": "Orange Plane", 
      "url": "http://hesp.suroot.com/elliot/muzei/public/images/randomhash2.jpg" 
     } 
    ] 
} 

может быть, вы получите, что JSON от неправильного массива json_encode() PHP с ключом , вы должны кодировать JSON из PHP без ключей, только с значениями массива (PHP Array to JSON Array using json_encode())

+0

Правильно, похоже, что это должно быть 'collection: ['. Но мне все еще интересно, будет ли его код работать. – user1923613

+0

@ user1923613 Что вам любопытно? –

+1

@JoshPinter, я думаю, что Retrofit GSON может получить пары «ключ-значения» коллекции, не беспокоясь о «colllection_name» и «username». Я столкнулся с той же ошибкой. Я должен написать свой собственный адаптер GSON, чтобы получить его правильно, аналогично этому [link] (http://sachinpatil.com/blog/2012/07/03/gson/) – Liangjun