在specs2中,您可以为以下元素匹配数组:

val json = """{"products":[{"name":"shirt","price":10, "ids":["1", "2", "3"]},{"name":"shoe","price":5}]}"""

def aProductWith(name: Matcher[JsonType],  price: Matcher[JsonType]): Matcher[String] =
  /("name").andHave(name) and /("price").andHave(price)

def haveProducts(products: Matcher[String]*): Matcher[String] =
  /("products").andHave(allOf(products:_*))

json must haveProducts(
  aProductWith(name = "shirt", price = 10) and /("ids").andHave(exactly("1", "2", "3")),
  aProductWith(name = "shoe", price = 5)
)


(示例取自:http://etorreborre.github.io/specs2/guide/SPECS2-3.0/org.specs2.guide.Matchers.html

如果products是json中的根元素,我该如何做同样的事情,即匹配产品的内容? haveProducts应该是什么样?

val json = """[{"name":"shirt","price":10, "ids":["1", "2", "3"]},{"name":"shoe","price":5}]"""

最佳答案

您可以这样将/("products").andHave(allOf(products:_*))替换为have(allOf(products:_*))

val json = """[{"name":"shirt","price":10, "ids":["1", "2", "3"]},{"name":"shoe","price":5}]"""

def aProductWith(name: Matcher[JsonType],  price: Matcher[JsonType]): Matcher[String] =
  /("name").andHave(name) and /("price").andHave(price)

def haveProducts(products: Matcher[String]*): Matcher[String] = have(allOf(products:_*))

json must haveProducts(
  aProductWith(name = "shirt", price = 10) and /("ids").andHave(exactly("1", "2", "3")),
  aProductWith(name = "shoe", price = 5)
)

关于json - 如何使用specs2匹配JSON中的顶级数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32177466/

10-08 23:14