Scala地图到Mongo文档

时间:2016-02-11 16:01:49

标签: json mongodb scala playframework-2.0 play-reactivemongo

我正在尝试将JSON解析为与JSON Inception一起使用的scala案例类,但之后我想将此对象保存到Mongo文档中。这适用于简单的字段,但我也有类似的东西:

{  
    ...
    "Things": [
         "Key1": "123",
         "Key2": "123" ]
    ...
}

等等......没有指定键,也没有指定键的数量。 在case类中,条目是map [String,String],如何轻松将其写入BSONDocument?我正在使用Play Framework 2.4和Reactivemongo。

1 个答案:

答案 0 :(得分:0)

我认为这里有一些混乱。字段Things不能像这样存在 - 它必须是JsObjects的数组(用大括号表示),即

   {  
       ...
       "Things": [
          {
             "Key1": "123",
             "Key2": "123"
          },
          {
             "Key1": "456",
             "Key2": "456"
          },
       ...
   }

因此,您要映射到的任何案例类都应如下所示(以最简单的形式):

   case class Things(Key1: String, Key2: String)

   case class MyCaseClass(somethingHere: String, Things: Option[Things], somethingElse: Int)

   object MyCaseClass {
     implicit val thingsFormat: OFormat[Things] = Json.format[Things]
     implicit val myCaseClassFormat: OFormat[MyCaseClass] = Json.format[MyCaseClass]
   }

只需注意几个小事:

  1. 如果您希望值为Int,那么当然不要使用引号 标记,例如"Key1": "123"字符串 "Key1": 123 Int
  2. 标准做法倾向于将mongo字段命名为camelCase - 所以从小写开始,例如things不是Things