Как преобразовать case-класс в Map [String, Object] с помощью Circe - PullRequest
0 голосов
/ 05 мая 2020

Мне нужно преобразовать 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() ... и посмотреть, возвращает ли один из них значение).

...