Scala 使用自定义转换器函数播放Json案例类映射器

Scala 使用自定义转换器函数播放Json案例类映射器,scala,play-json,Scala,Play Json,我有一个json,看起来像这样 { "key1": "val1", "key2": "val2", //other stuff "key5": { "nkey1": [ "nval1", "nval2" ], "nkey2": 90, "nkey3": 100 }, "page": 1, "rows": 30, "result_count": 3, "parser_result": null, "ip_address": "10.0.0.1", "search_d

我有一个json,看起来像这样

{
"key1": "val1",
"key2": "val2",
//other stuff
"key5": {
  "nkey1": [
    "nval1",
    "nval2"
  ],
  "nkey2": 90,
  "nkey3": 100
},
"page": 1,
"rows": 30,
"result_count": 3,
"parser_result": null,
"ip_address": "10.0.0.1",
"search_date": "20151013 05:12:05",
"key6": [
  //more key values
]
}
我需要一个对象映射器,用于使用play框架的scala case类。我可以为简单的类编写转换。然而,我有一些自定义功能,这是在getMap类中给出的,该类在
JsPath\“key5”
中获取一个jObject实例,如下代码所示。我该如何实现这一点,因为我的方法似乎无法实现这一点

implicit val myReads: Reads[MyCustomObject] = (
  (JsPath \ "key1").read[String] and
    (JsPath).read[CustomObject] and
    (JsPath \ "key3").read[String] and
    (JsPath \ "key4").readNullable[String] and
    (JsPath \ "key5").read(/*How do I call getMap here*/) and
    (JsPath \ "key6").read[Seq[CustomObject2]]
  )(SearchQuery.apply _)

def getMap(jsObject: JsObject):Map[String, List[JsValue]] ={
  val r = Map[String, List[JsValue]]() ++ jsObject.fields.map(keyValues => {
    keyValues._2 match {
      case JsArray(arr) => keyValues._1 -> arr.toList
      case v: JsValue => keyValues._1 -> List(v)
      case _ => keyValues._1 -> List()
    }
  })
  r
}

我使用以下代码片段来解决我的问题。基本上,这只是另一个可以使用常规scala语法修改的构造函数

implicit val myReads: Reads[MyCustomObject] = (
  (JsPath \ "key1").read[String] and
  (JsPath).read[CustomObject] and
  (JsPath \ "key3").read[String] and
  (JsPath \ "key4").readNullable[String] and
  (JsPath \ "key5").read(JsValue) and
  (JsPath \ "key6").read[Seq[CustomObject2]]
)(key1: String, custom: CustomObject, key3: String, key4: Option[String,
  key5: JsValue, key6: Seq[CustomObject2){
  SearchQuery.apply(key1, custom, key3, key4, transformToMap(key5), key6) // Where transformToMap is a custom function that I have defined.
}