У меня есть доступ к веб-интерфейсу API, и в ответ он отправляет различные полезные данные, упакованные в один и тот же конверт, например:
Получите список рецептов:
{
"status": "SUCCESS",
"messages": [],
"input": null,
"output": [
{
"id": 1,
"title": "Egg with bacon"
},
{
"id": 2,
"title": "Ice cream"
}
]
}
Получите один рецепт:
{
"status": "SUCCESS",
"messages": [],
"input": {"id": 1},
"output": {
"id": 1,
"title": "Egg with bacon"
}
}
Ответ об ошибке:
{
"status": "ERROR",
"messages": ["Recipe not found"],
"input": {"id": 4},
"output": null
}
Список категорий:
{
"status": "SUCCESS",
"messages": [],
"input": null,
"output": [
{
"id": 1,
"title": "Deserts"
},
{
"id": 2,
"title": "Main Courses"
}
]
}
Таким образом, ключи конверта всегда присутствуют. Ввод - это объект значения ключа или ноль, сообщения - это всегда массив строк или пустой массив, статус - строка. Но вывод может быть разным. Это может быть тип структуры «Рецепт», массив структур «Рецепт» или структура категории.
Мой вопрос: как я могу декодировать этот json, не записывая каждый раз одну и ту же логику декодирования для конверта? Я хочу написать декодер только один раз для конверта и ввести разные декодеры для вывода.