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[?]
감사합니다, 나는 그것을 밖으로 시도 할 것이다. 참고로 내 코드는 어떻게 보이나요? 그것은 idomatic 또는 쓰레기? 내가 더 잘할 수 있을까? –
지금까지 아무런 문제가 보이지 않습니다. – Shadowlands
그 덕분에, Shadowlands. 나는 그것을 포함하지 않았지만, 나는'createFields (...)'함수에 세 번째 필드 ('l' (lineNumber))가있다. 여기서 object의 각 obj에 대해 lineNumber를 증가시켜야한다. 현재, 나는'getObjMap (...') 메소드의 시작 부분에서 lineNumber를 증가시킨다. for 표현식을 사용하여 lineNumber를 계속 증가 시키려면 어떻게해야합니까? –