Мне нужно преобразовать case-class в представление json на основе карты, используя только типы Scala / JDK. Он должен использоваться как параметр для библиотеки, которую я не могу изменить. Я использую Circe, поэтому могу go из case-класса в Json объект, но я не знаю, как получить от него Map [String, Object].
As пример, у меня есть эти case-классы:
Line(from: Point, to: Point)
Point(x: Int, y:Int)
и это значение:
val line = Line(Point(10, 20), Point(20, 30))
, тогда я хотел бы получить следующую карту:
Map(
"from" -> Map("x" -> Int(10), "y" -> Int(20)),
"to" -> Map("x" -> Int(20), "y" -> Int(30))
)
(конечно, в классах case могут присутствовать и другие числа)
Итак, я могу использовать line.asJson
, чтобы получить представление JSon, но откуда мне go оттуда? Я пытался использовать line.asJson.fold()
или foldWith()
, но застревал при попытке обработать JsonNumber. Кажется, я не могу получить фактическое значение (кроме случайной попытки использовать методы toDouble()
, toInt()
... и посмотреть, возвращает ли один из них значение).