我有以下json字符串:
{"guid": "4bad1d9a-180f-4751-a698-4aac07b1eac7","partition":1,"roles": []}
我已经能够使用specs2的org.specs2.matcher.JsonMatchers来强制执行guid和分区,例如:
json must /("guid" -> "4bad1d9a-180f-4751-a698-4aac07b1eac7")
json must /("partition" -> 1)
但我无法弄清楚正确的语法来强制'角色'存在且'是一个空数组'。这可以吗?
修改
根据评论者的提问,我尝试了以下内容:
json must /("roles" -> "[]")
导致以下测试失败:
[error] {guid : 5ad4c4c5-4fdb-461b-9883-b84ff3b84610,partition : 1.0,roles : []} doesn't contain 'roles' : '[]'
答案 0 :(得分:3)
要为roles
测试的值为scala.util.parsing.json.JSONArray
类型,因此您可以写:
json must /("roles" -> JSONArray(Nil))
如果出现这种情况可能会定义一个值:
val empty = JSONArray(Nil)
json must /("roles" -> empty)
答案 1 :(得分:3)
对于那些想要回答这个问题的人来说,Eric提供的答案已不再有效。
似乎匹配空数组的当前方式(specs2 3.8
)将是:
json must /("roles").andHave(exactly[String]())
这不是最好的方法,但它是我发现的唯一可行的方法,并在回读时使某些有意义。
andHave
与roles
和exactly
的内容匹配,没有参数与空数组匹配。使用String
类型参数是因为否则编译器会抱怨它无法推断出类型。