【问题标题】:Get some values from each object in Scala List of objects and send it to HTTP从 Scala 对象列表中的每个对象获取一些值并将其发送到 HTTP
【发布时间】:2015-08-24 20:49:37
【问题描述】:

我是 scala 和 play framework 的新手。我有一个 JSon 对象列表,我试图只检索列表中每个对象的两个属性(名称和图像),并将其以 Json 格式发送到 http 响应, 我正在使用 mongoDB 获取完整列表

def NamesImages = Action.async {implicit request =>
val FutureProducts = productDao.find(BSONDocument()).collect[List]()
FutureProducts.map { prod => prod.map {
        a => 
        val prdObj = Json.obj("name" -> JsObject(a.name.get), "image" -> JsObject(a.image))
            Ok(new JsArray(Json.toJson(prdObj)))
        }
}}

我收到编译错误:

 **type mismatch;**

 found   : play.api.libs.json.JsValue
 required: Seq[play.api.libs.json.JsValue]

【问题讨论】:

    标签: json mongodb scala playframework


    【解决方案1】:

    您需要使用 Seq 来包装您的结果。 JsArray 想要一个 JsValue 序列 试试这个:

        def NamesImages = Action.async {implicit request =>
    val FutureProducts = productDao.find(BSONDocument()).collect[List]()
    FutureProducts.map { prod => Ok(JsArray(prod.map {
            a => Json.obj("name" -> JsObject(a.name.get), "image" -> JsObject(a.image))
                }))
    }}
    

    【讨论】:

    • 我遇到另一个错误:类型不匹配;找到:List[play.api.mvc.Result] 需要:play.api.mvc.Result
    • 啊,当然,我没有看到您在 map 函数中返回结果。我编辑答案
    • 它现在可以工作了。。谢谢,你能解释一下吗
    • 当然。在 Play Framework 中,每个 Action 必须只返回一个 Result(Result 是 http 响应),或者如果您使用 actions.async,则必须返回一个 Future[Result]。 JsArray 现在使用来自 map 操作的 JsValue 列表进行初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多