【问题标题】:Scala Lift - Return model as json objectScala Lift - 将模型返回为 json 对象
【发布时间】:2012-04-18 00:13:58
【问题描述】:

我有以下:

object API_Chat extends RestHelper {

    serve {

        var response = Chat.findAll(

            ("room" -> "aroom")
            ~
            ("handle" -> "ahandle")

        ).map(_.asJValue)

        JsonResponse(write(response(0)) :: Nil)

    }

}

我要做的是返回一个 json 对象,其中包含模型 Chat 中的所有值。

当我收到回复时,它看起来像这样:

["{\"name\":\"J1M\",\"_id\":\"4f8d55b240d41dcad5c3f982\",\"target\":\"all\",\"time\":1334662578,\"room\":\"jroom\",\"value\":\":)\",\"user\":\"j1m\",\"handle\":\"f1aaa95db5150a6330552e30918728b5\",\"level\":\"_1\"}"] 

显然我试图只返回一个项目,所以不确定为什么它包含在一个数组中,而且它似乎已经转义了 json 字符串。

任何人都可以阐明如何进行这项工作吗?

非常感谢任何帮助,在此先感谢:)

【问题讨论】:

    标签: json scala lift


    【解决方案1】:

    我不确定您尝试将什么作为 JsonResponse 发送,但您的响应 val 是 List[JValue]。调用 write(response(0)) 会将 List 中的第一个 JValue 序列化为 String。然后,您将该 String 与 Nil 连接以创建一个包含单个元素的 List[String]。 JsonResponse.apply 的单参数版本采用 JValue,因此将调用将 Seq[A] 转换为 JArray 的 net.liftweb.json.JsonDSL (seq2jvalue) 中的隐式转换.....这就是为什么将 JSON 数组视为响应。

    如果你只想返回第一个元素,你应该可以使用:

    JsonResponse(response(0))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 2017-02-22
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多