4

我正在使用 Scalatra 为一些 JSON RESTful API 编写测试,一个片段如下所示

class MyScalatraServletTests extends ScalatraSuite with FunSuite {

test("An valid request should return 200") {
    get ("/rest/json/accc/B1Q4K3/1") {
      status should equal (200)
      body should include ("TEST")
    }
  }
}

预期的主体是 Scalatra 通过其 JSON 支持序列化的 JSON。我的问题是如何将主体转换回 scala 中的相同案例类实例,并大大简化测试?

4

2 回答 2

2

json4s 可以直接用于从 JSON 值中提取案例类。

import org.json4s._
import org.json4s.jackson.JsonMethods._
val parsedBody = parse(body)
parsedBody.extract[MyCaseClass]

您还可以使用类似 XPath 的表达式来查询 JSON。

val parsedBody = parse(body)
val email = (parsedBody \ "user" \ "email").values
email should be ("example@example.org")

您可以调用以从s(json4s 的 JSON 文档的内部表示).values获取原始 Scala 值(Strings、Ints 等)。JValue

有关所有这些示例,请参阅json4s 介绍

于 2013-03-12T10:37:30.583 回答
1

我不确定您使用的是哪个 JSON 序列化程序或原始类的结构,但如果您想将 JSON 反序列化回 Scala,我建议您使用 Jackson Scala 模块:

https://github.com/FasterXML/jackson-module-scala

于 2013-01-05T05:29:19.547 回答