Преобразование ReactiveMongo JSON с помощью Play JSON
Функциональность JSON ReactiveMongo генерирует объекты (JsObject
на языке play-json), а не скаляры для определенных типов данных MongoDB, таких как BSONObjectID
а также BSONDateTime
. Например, вы получаете такой JSON:
{
"_id" : {
"$oid" : "5de32e618f02001d8d521757" //BSONObjectID
},
"createdAt" : {
"$date" : 15751396221447 //BSONDateTime
}
}
Помимо громоздкости, я бы предпочел не раскрывать JSON, который передает проблемы MongoDB клиентам REST.
Сложность заключается в том, что эти значения встречаются по всему дереву, поэтому мне нужно написать преобразователь Play JSON, достаточно умный, чтобы рекурсивно преобразовывать приведенное выше на каждом уровне, чтобы оно выглядело так:
{
"id" : "5de32e618f02001d8d521757",
"createdAt" : 15751396221447
}
Одна неудачная попытка сделать это всего за BSONObjectID
это:
(JsPath \ "_id").json.update(
JsPath.read[JsObject].map{ o => o ++ Json.obj( "id" -> (o \ f"$$oid").as[String]) }
)
Как я могу это сделать?