Построить модель для настраиваемого поля:
public class CustomHour {
public int maj;
public int min;
public CustomHour(int maj, int min) {
this.maj = maj;
this.min = min;
}
}
построить десериализатор для этого пользовательского класса:
public class CustomHourDeserializer implements JsonDeserializer<CustomHour> {
public CustomHour deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) {
String[] data = json.getAsJsonPrimitive().getAsString().split(":");
int maj = Integer.parseInt(data[0]);
int min = Integer.parseInt(data[1]);
return new CustomHour(maj, min);
}
}
Построить свой Data
класс, встраивать пользовательское поле (с именем поля):
public class Data {
@SerializedName("maj:min")
public CustomHour hour;
}
CustomHourDeserializer
как тип объявления apter перед десериализацией:
String input = "{ \"maj:min\": \"8:80\" }";
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(CustomHour.class, new CustomHourDeserializer());
Gson gson = gsonBuilder.create();
Data data = gson.fromJson(input, Data.class);
System.out.println("min : " + data.hour.min + " | max : " + data.hour.maj);
Можете ли вы изменить структуру json так, чтобы она была {"maj": 8, "min": 80}? Это будет более легко разбираться с помощью GSON. –
У меня нет контроля над тем, как я получаю JSON. – octavio
Как насчет пользовательского десериализатора (http://stackoverflow.com/questions/8165412/gson-custom-deserializing-logic-based-on-field-name)? Похоже, что для этого простого случая очень много работы, но должно работать. –