С вашими данными есть одна сложная вещь: они содержат numbers
и strings
.
Мое решение использует play-json
!
Итак, сначала я создал Структуручтобы доставить Json в Scala-Land:
case class Tags(tags: Seq[Map[String, String]])
object Tags {
implicit val mapReads: Reads[Map[String, String]] = { jv: JsValue =>
JsSuccess(jv.as[Map[String, JsValue]].map {
case (k, v) =>
k -> v.toString
})
}
implicit val jsonReads: Reads[Tags] = Json.reads[Tags]
}
Если вы создаете case class
с этим Читателем implicit val jsonReads: Reads[Tags] = Json.reads[Tags]
,
, все, что отсутствует, - это Читатель для Карты.Это изменяет общий JsValue
на String.
Использование:
json.validate[Tags] match {
case JsSuccess(value, _) =>
for{
tags <- value.tags
entry <- tags.toSeq
} yield (entry._1, entry._2.toString)
case err:JsError => // handleError
}
Здесь, по сути, вы выравниваете Последовательность и Карту.
Результат: List((12,9), (19,6), (4,6), (37,4), (13,"buttonName"),..
Здесь вы можете поиграть с этим сами: https://scalafiddle.io/sf/kM6iBXF/2