Простой ответ - сделать это
val jsonMap = mapper.readValue[Map[String, List[Map[String, String]]]](jsonString)
и затем использовать ответ из предыдущего вопроса.
Если вы хотите сделать это вручную, что-то вроде этого должно работать:
val map: Map[String, Map[String, String]] =
jsonMap.collect {
case (k, v: List[_]) =>
val list: List[Map[String, String]] =
v.collect {
case m: Map[_, _] =>
m.collect {
case (k: String, v: String) =>
k -> v
}
}
k -> list.headOption.getOrElse(Map.empty)
}
При этом будут игнорироваться любые элементы в Object
, которые не являются обязательными. Вложенные collect
выражения необходимы, потому что стирание типа предотвращает сопоставление вложенного типа в одной операции.
Это предполагает, что вы хотите head
из List[Map]
внутри Object
, но это должно быть понятным, как изменить это на другое преобразование.