Преобразование 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]) }
)

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

0 ответов

Другие вопросы по тегам