2016-07-14 4 views
0

есть ли простой способ, чтобы преобразовать этот JSON:JSON разбора одной строки объекта

{ 
    ..., 
    "pictures": [ 
     "url1", 
     "url2" 
    ], 
    ... 
} 

к

List<Picture> pictures 

где Изображение:

class Picture{ 
     String url; 
} 

Он не будет работайте, как указано выше, потому что у меня есть исключение, говоря

Expected BEGIN_OBJECT but was STRING 
+0

Быстрое исправление в зависимости от вашего использования объекта может заключаться в том, чтобы поставить '@ JsonValue' над получателем для вашего' String url'. – Zircon

+0

@ Zircon Неверная библиотека. Кроме того, это было бы полезно только для сериализации. –

ответ

1

Для этого вам необходимо реализовать собственный десериализатор. Если смотреть, как это (я не пытался выполнить, но это должно дать вам идею где начать, вероятно, у вас есть открытый конструктор с аргументом String в вашем Picture.class)

private class PictureDeserializer implements JsonDeserializer<Picture> { 
    public Picture deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) 
     throws JsonParseException { 
    return new Picture(json.getAsJsonPrimitive().getAsString()); 
    } 
} 

Он должен быть зарегистрирован :

GsonBuilder gson = new GsonBuilder(); 
gson.registerTypeAdapter(Picture.class, new PictureDeserializer()); 
+0

Я знаю метод десериализатора, чтобы сделать это, есть ли другой способ избежать десериализатора? – PaleNisko

+1

@PaleNisko Тогда вы должны упомянуть об этом в вопросе, чтобы не заставлять людей затягивать время. Во всяком случае, ответ: я так не думаю. Картограф содержит предопределенный набор действий, сопоставленных с наиболее распространенными типами/классами по принципу «один к одному» (упрощенный). Пройдя через дерево JSON, картограф встречает разные типы/классы и соответственно десериализует их. Например. одиночная строка сопоставляется с строкой String.class. Если у вас есть пользовательский Picture.class, то он не может иметь согласованное сопоставление, поскольку его разработчики не могут иметь в виду все классы в мире. –

+0

Хорошо, спасибо за ваши отзывы, я буду помнить о ваших советах. Знаю, я понимаю, почему так делается! – PaleNisko

Смежные вопросы