Преобразование ReactiveMon go JSON с Play JSON - PullRequest
0 голосов
/ 20 апреля 2020
Функциональные возможности

ReactiveMon go JSON генерируют объекты (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]) }
)

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

...