0
給定一個JsObject
的列表,我想將它轉換爲Map[String, JsValue]
,然後遍歷每個映射的鍵值對,從而爲每個對創建一個JsObject。最後,我想將所有這些JsObject放入一個List[JsObject]
。表達式中的多個字段
下面是我用for表達式的嘗試。
def getObjMap(obj: JsObject): Option[Map[String, JsValue]] = obj match {
case JsObject(fields) => Some(fields.toMap)
case _ => None
}
def createFields(x: (String, JsValue)): JsObject = Json.obj("n" -> x._1,
"v" -> x._2)
val objects: List[JsObject] = foo()
val res: List[JsObject] = for {
obj <- objects
map <- getObjMap(obj)
mapField <- map
} yield(createFields(mapField))
但是,我在mapField <- map
行上收到編譯時錯誤。
[error] ...\myApp\app\services\Test.scala:65: type mismatch;
[error] found : scala.collection.immutable.Iterable[play.api.libs.
json.JsObject]
[error] required: Option[?]
謝謝,我會嘗試了這一點。在附註中,我的代碼看起來如何?它是習語還是垃圾?我能做得更好嗎? –
到目前爲止我沒有看到任何問題。 – Shadowlands
工作,謝謝,Shadowlands。我沒有包含它,但我有我的'createFields(...)'函數包含第三個字段('l'(lineNumber)),其中,對於對象中的每個obj,我需要增加一個lineNumber。目前,我在getObjMap(...')方法的開頭增加了lineNumber。我怎麼能仍然使用for表達式增加lineNumber? –