1

我有以下 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' : '[]'
4

2 回答 2

3

要测试的值rolesscala.util.parsing.json.JSONArray类型,因此您可以编写:

json must /("roles" -> JSONArray(Nil))

如果出现很多可能会定义一个值:

val empty = JSONArray(Nil)
json must /("roles" -> empty)
于 2013-10-05T00:51:31.443 回答
3

对于那些来寻找答案的人来说,Eric 提供的答案不再有效。

看起来当前specs2 3.8匹配空数组的方式 ( ) 是:

json must /("roles").andHave(exactly[String]())

这不是最好的方法,但它是我发现的唯一一种在回读时有效且有意义的方法。

andHave匹配的内容和roles没有exactly参数的匹配项匹配一个空数组。使用String类型参数是因为否则编译器会抱怨它无法推断类型。

于 2016-07-05T13:21:17.083 回答