0

私はこのような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 ケース クラスを使用する同じオブジェクト マッパーが必要です。単純なクラスの変換を書くことができます。JsPath \ "key5"ただし、以下のコードに示すように、内部で jObject のインスタンスを取る getMap クラスで提供されるカスタム機能がいくつかあります。私の方法ではこれを達成できないように見えるので、これを実装するにはどうすればよいですか。

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
}
4

1 に答える 1