Я получаю ответ JSON от восходящего сервера, на который у меня нет контроля, для изменения.Воспроизвести JSON JsPath Условные типы
JSON может иметь следующий формат
{"data":[["Some_text","boolean",["key_string1","key_string2"]]]}
Или это может также показать, как
{"data":[["Some_text","boolean","key_string2"]]}
Или это может проявляться в виде комбинации из двух.
{"data":[["Some_text","boolean",["key_string1","key_string2"]],["Some_text","boolean","key_string2"]]}
Индивидуально я могу определить ЧТЕНИЯ для каждого формата, если они не смешиваются. Однако, учитывая, что данные могут быть смешанного формата, я не могу обернуть голову тем, как следует читать записи, чтобы проверить, не является ли базовый тип строкой или массивом перед его преобразованием?
Можно ли сказать что-то вроде
(
(JsPath)(0).read[String] and
(JsPath)(1).read[Boolean] and
(JsPath)(2).read(**if type is simple, String OR if type is array, then seq**)
)(SomeGloriousCaseClass)
Как я могу подойти к этой проблеме десериализации?
У меня довольно хорошее представление о том, как это сделать, но можете ли вы связать базовый класс, на который вы хотите его сопоставить? –
Несомненно, я не против формата для базового класса, если он решает проблему десериализации. В настоящее время я использовал следующий класс case 'case class SomeGloriousCaseClass (initialPart: String, booleanPart: Boolean, theDifficultPart: Seq [String])'. Я даже не возражаю, если все преобразуется в последовательность – Serendipity
'(_ \" data "). Читать [JsArray] .flatMap {jsa => ??? } ' – cchantep