У меня есть JSON структура:преобразование JSON вложенного массива
{
"date": "2015-01-01",
"id": 100,
"movies":[
{
"id": 1,
"length": 131,
"timestamp": 1447837200
},
{
"id": 2,
"length": 131,
"timestamp": 1447840800
}
]
}
мне нужна проверка: - "дата" является действительной датой; - «id» - это номер в настоящем списке; - «фильмы» - это список объектов;
И трансформация: - «метка времени» - Разбираем unixtimestamp в строку даты (HH: мм)
мне нужно поставить «дата» и «идентификатор» от корня к каждому элементу массива
Таким образом, результат объект:
[
{
"id": 1,
"length": 131,
"timestamp": "09:00",
"parent_id": 100,
"date": "2015-01-01"
},
{
"id": 2,
"length": 131,
"timestamp": "10:00",
"parent_id": 100,
"date": "2015-01-01"
}
]
я написал некоторый код, ведьма преобразовать метку времени, но это выглядит ужасно ..
val inputJson = play.api.libs.json.Json.parse(
"""{
"date": "2015-01-01",
"id": 100,
"movies":[
{
"id": 1,
"length": 131,
"timestamp": 1447837200
},
{
"id": 2,
"length": 131,
"timestamp": 1447840800
}
]
}"""
)
val timestampTransform = (
(__ \ "timestamp").json.update(
__.read[JsNumber].map(
timestamp => {
JsString(new DateTime(timestamp.asOpt[Int].getOrElse(0)).toString("HH:mm"))
})
))
val reads = (__ \ 'movies).json.update(
__.read[JsArray].map(
movies => {
val result = movies.as[List[JsObject]].map(
element => {
element.transform(timestampTransform).get
})
Json.toJson(result)
}
)
)
println(inputJson.transform(reads))