Как разобрать курсор [JsObject] в scala reactive mongo

У меня такой API есть в play2.3 - reactive mongo-

 def addEndUser = Action.async(parse.json) { request =>
        val cursor: Cursor[JsObject] = collectionEndUser.find(Json.obj("mobileNumber" -> "9686563240","businessUserId" ->"1")).
        sort(Json.obj("createDate" -> -1)).cursor[JsObject]
        val futureEndUserList: Future[List[JsObject]] = cursor.collect[List]()
        futureEndUserList.map { user =>
            val x:JsObject = obj(Map("endUsers" -> toJson(user) ))
                println(x)
    }
    request.body.validate[User].map { user =>

        val jsonData = Json.obj(
            "businessUserId" ->user.businessUserId,
            "userId" -> user.userId,
            "registrantId" ->user.registrantId,
            "memberId" -> "",
            "name"   -> user.name,
            "currentPoints" -> user.currentPoints,
            "email" -> user.email,
            "mobileNumber" -> user.mobileNumber,
            "mobileCountryCode" ->user.mobileCountryCode,
            "createDate" -> (new java.sql.Timestamp(new Date().getTime)).toString,
            "updateDate" -> (new java.sql.Timestamp(new Date().getTime)).toString,
            "purchasedAmtForRedemption"->user.purchasedAmtForRedemption
        )

        collectionEndUser.insert(jsonData).map { lastError =>
                 Logger.debug(s"Successfully inserted with LastError: $lastError")
                 Created
        }
    }.getOrElse(Future.successful(BadRequest("invalid json")))
}

def findEndUserByUserId(userId: String) = Action.async {
    val cursor: Cursor[JsObject] = collectionEndUser.find(Json.obj("userId" -> userId)).
    sort(Json.obj("createDate" -> -1)).cursor[JsObject]

    val futureEndUserList: Future[List[JsObject]] = cursor.collect[List]()

    //val futureEndUserJsonArray: Future[JsArray] = futureEndUserList.map { endUser =>
        //Json.arr(endUser)
    //}

    futureEndUserList.map { user =>
        Ok(toJson(Map("endUsers" -> toJson(user) )))
    }
}

Этот API называется методом POST для хранения этих полей в БД. Но перед добавлением в БД я хочу получить значение из коллекции и использовать его в одном из полей. Хотя println (x) печатает объект вроде этого {"endUsers": [{"_ id": {"$ oid": "543f6912903ec10f48673188"}, "businessUserId": "1", "createDate": "2014-10 -16 12: 13: 30.771 "," currentPoints ": 16.0," email ":" [email protected] "," mobileCountryCode ":" + 91 "," mobileNumber ":" 9686563240 "," name ":" Ruthvick , "businessUserId": "1", "userId": "4", "name": "Ruthvick", "currentPoints": "0", "email": "[email protected]", "mobileNumber": "9686563240 "," mobileCountryCode ":" + 91 "," createDate ":" 2014-10-16 12: 12: 08.692 "," updateDate ":" 2014-10-16 12: 12: 08.692 "," PurchaseAmtForRedemption ":" 0 "}, {" _ id ": {" $ oid ":" 543f689e903ec10f48673186 "}," businessUserId ":" 1 "," userId ":" 3 "," name ":" Ruthvick "," currentPoints ":" 0 "," email ":" [email protected] "," mobileNumber ":" 9686563240 "," mobileCountryCode ":" + 91 "," createDate ":" 2014-10-16 12: 11: 34.079 "," updateDate ":" 16.10.2014 12: 11: 34.079 "," купленоAmtForRedemptio n ":" 0 "}, {" _ id ": {" $ oid ":" 543f63ef903ec10f48673185 "}," businessUserId ":" 1 "," userId ":" 2 "," name ":" Ruthvick "," currentPoints ":" 0 "," email ":" [email protected] "," mobileNumber ":" 9686563240 "," mobileCountryCode ":" + 91 "," createDate ":" 2014-10-16 11: 51: 35.394 "," updateDate ":" 2014-10-16 11: 51: 35.394 "," PurchasesAmtForRedemption ":" 0 "}]}, синтаксический анализ

x.endUsers[0].name is throwing error like

 identifier expected but integer literal found.
    println(x.endUsers[0].name)

Пожалуйста, помогите мне разобрать это .. Я новичок в игровом фреймворке.

Спасибо


person user3777846    schedule 21.10.2014    source источник


Ответы (1)


Думаю, это то, что вы ищете:

(x \ "endUsers") (0) \ "name"

Но вам не нужно писать: val x: JsObject = obj (Map ("endUsers" -> toJson (user))), потому что сам пользователь является List of JsObject. Следовательно, пользователь (0) \ "name" будет делать то же самое.

Подробности: https://www.playframework.com/documentation/2.3.x/ScalaJson

person Roshan Sharma    schedule 18.12.2014