Замена полей в JSON новым объектом с использованием json4s

У меня есть приложение scala, в котором я использую json4s для некоторых манипуляций с json. У меня есть несколько полей, которые я хотел бы преобразовать в новый объект.

Например, у меня есть следующее:

"start_datetime":"2016-12-11T01:00:05+0000",
"type":"absolute",
"start":"5",
"type":"offset"

Что хотелось бы превратить в:

"time":[
 {
    "type":"absolute",
    "start_datetime":"2016-12-11T01:00:05+0000"
 },
 {
    "type":"offset",
    "start":"10"
 }
]

Как я могу сделать это с помощью json4s?


person Steve Y.    schedule 30.01.2017    source источник


Ответы (1)


В приведенном ниже фрагменте используется собственный json4s DSL.

Объект Json формируется из кортежей, связанных вместе методом ~, а массив Json создается путем создания объекта Sequence в Scala. Другие примитивные типы, такие как String, Number, Boolean, сопоставляются с соответствующими типами в scala.

import org.json4s.native.JsonMethods._
import org.json4s.JsonDSL._

val json = "time" -> Seq(
("type" -> "absolute") ~ ("start_datetime" -> "2016-12-11T01:00:05+0000"),
("type" -> "offset") ~ ("start" -> "10")
)

scala> compact(render(json))
res3: String = {"time":[{"type":"absolute","start_datetime":"2016-12-11T01:00:05+0000"},{"type":"offset","start":"10"}]}
person rogue-one    schedule 30.01.2017