Проблема десериализации Android JSON / GSON

#android #json #gson

#Android #json #gson

Вопрос:

Я пытаюсь десериализовать следующую часть JSON с помощью GSON.

        "images": [
        {
         "link": "http://media.neckermann.de/image/101/900/7/27/927/101_219927.jpg"
        },
        {
         "link": "http://media.neckermann.de/image/101/480/7/27/927/101_219927.jpg"
        },
        {
         "link": "http://media.neckermann.de/image/101/210/7/27/927/101_219927.jpg"
        }
       ]
  

Если GSON получает эту строку JSON, происходит сбой GSON. Если в «изображениях» есть только один элемент, он отлично работает. Как я могу решить эту проблему? Иногда я получаю только одну «ссылку» в JSON, а иногда в JSON есть три записи, как указано выше. Как я могу обработать этот JSON с помощью GSON?

Заранее большое спасибо!

Мартин

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

1. Можете ли вы предоставить какой-нибудь код, который вы написали? Также было бы очень полезно предоставить некоторую трассировку стека.

2. Опубликованный вами JSON недопустим. jsonlint.com JSON должен начинаться либо с {, либо [.

Ответ №1:

Вывод следующего примера является

[link=http://media.neckermann.de/image/101/900/7/27/927/101_219927.jpg , 
link=http://media.neckermann.de/image/101/480/7/27/927/101_219927.jpg , 
link=http://media.neckermann.de/image/101/210/7/27/927/101_219927.jpg ]
 public class Foo
{
  static String jsonInput = 
    "{"   
      ""images":"   
      "["   
        "{"   
          ""link":"http://media.neckermann.de/image/101/900/7/27/927/101_219927.jpg""   
        "},"   
        "{"   
          ""link":"http://media.neckermann.de/image/101/480/7/27/927/101_219927.jpg""   
        "},"   
        "{"   
          ""link":"http://media.neckermann.de/image/101/210/7/27/927/101_219927.jpg""   
        "}"   
      "]"   
    "}";

  public static void main(String[] args)
  {
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
    Gson gson = gsonBuilder.create();
    ImageUris uris = gson.fromJson(jsonInput, ImageUris.class);
    System.out.println(uris);
  }
}

class ImageUris
{
  private ImageUri[] images;

  @Override
  public String toString()
  {
    return Arrays.toString(images);
  }
}

class ImageUri
{
  private String link;

  @Override
  public String toString()
  {
    return "link="   link;
  }
}