Как мне обрабатывать словарь Flat JSON с помощью Retrofit

Моя веб-служба возвращает словарь json, который представляет идентификатор и имя нескольких объектов диапазона.

{
    "1": "Range 1",
    "2": "Range 2",
    "3": "Range 3"
}

Я использую модификацию с gson и хотел бы, чтобы ответ был массивом объектов Range.

public class Range {
    public Integer persistentId;
    public String name;
}

Как мне настроить свой класс ответа, чтобы справиться с этим?

public interface ContentService {
    @GET("/apiv2/release_range_data.json")
    Call<RangeResponse> getRanges();
}

public class RangeResponse {
    public ArrayList<Range> ranges;
}

Нужен ли мне специальный десериализатор, чтобы справиться с этим?


person Hackmodford    schedule 12.05.2016    source источник


Ответы (1)


как насчет Map<String, String>, а затем преобразовать его в список Range?

UPD

public class Range {
    public Integer persistentId;
    public String name;
}

public interface ContentService {
    @GET("/apiv2/release_range_data.json")
    Call<RangeResponse> getRanges();
}

public class RangeResponse {
    public Map<String, String> ranges;

    public ArrayList<Range> getRanges() {
        ArrayList<Range> result = new ArrayList<>(ranges.size());
        for(String id : ranges.keySet()) {
            Range range = new Range();
            range.persistentId = Integer.parseInt(id);
            range.name = ranges.get(id);
            result.add(range);
        }
        return result;
    }
}
person Oleg Khalidov    schedule 12.05.2016
comment
Можете ли вы привести пример того, как это сделать? - person Hackmodford; 12.05.2016
comment
Я изменил код на этот. Потом использовал ваш пример в отзыве. Теперь это работает. Спасибо @GET(/apiv2/release_range_data.json) Call‹Map‹String,String›› getRanges(); - person Hackmodford; 12.05.2016
comment
JSON, который вы прикрепили, это правильно? или эта карта имеет ranges название? - person Oleg Khalidov; 12.05.2016