Это довольно близко, требуется всего несколько небольших изменений.
Сначала создайте класс, который инкапсулирует все данные JSON:
case class AllDetails(vehicle_details: List[Map[String, VehicleDetails]])
Затем просто extract
этот класс из json
implicit val formats = DefaultFormats
val details = Extraction.extract[AllDetails](json)
Для этих конкретных полей JSON поля seat
и engine
присутствуют не во всех записях, поэтому необходимо изменить VehicleDetails
, чтобы сделать эти Option
значения:
case class VehicleDetails(
name: String,
manufacturer: String,
model: String,
year: String,
color: String,
seat: Option[Int],
variants: Seq[String],
engine: Option[Int],
dealer: Map[String, String],
franchise: Map[String, String]
)
[Другие значения, которые могут быть опущены в других записях, также должны быть Option
значения]
Вы можете снять результат, используя стандартный Scala методы. Например,
res.vehicle_details.headOption.foreach { cars =>
val typeNames = cars.keys.mkString(", ")
println(s"Car types: $typeNames")
cars.foreach { case (car, details) =>
println(s"Car type: $car")
println(s"\tName: ${details.name}")
val variants = details.variants.mkString("[", ", ", "]")
println(s"\tVariants: $variants")
}
}
Чтобы вернуться к необработанному JSON, используйте Serialization
:
import org.json4s.jackson.Serialization
val newJson = Serialization.write(res)
println(newJson)