规格2 JsonMatchers匹配';空数组';

规格2 JsonMatchers匹配';空数组';,json,scala,specs2,Json,Scala,Specs2,我有以下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字符串:

{"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)
但我无法找出正确的语法来强制执行“roles”存在且“is a empty array”。这可以吗

编辑:

根据评论者的问题,我尝试了以下方法:

json must /("roles" -> "[]")
这将导致以下测试失败:

[error]    {guid : 5ad4c4c5-4fdb-461b-9883-b84ff3b84610,partition : 1.0,roles : []} doesn't contain 'roles' : '[]'

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

json must /("roles" -> JSONArray(Nil))
如果经常出现这种情况,可以定义一个值:

val empty = JSONArray(Nil)
json must /("roles" -> empty)

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

json must /("roles" -> JSONArray(Nil))
如果经常出现这种情况,可以定义一个值:

val empty = JSONArray(Nil)
json must /("roles" -> empty)

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

当前匹配空数组的方法(
specs2 3.8
)似乎是:

json must /("roles").andHave(exactly[String]())
这不是最好的方法,但这是我发现的唯一一种有效的方法,当我回过头来读的时候,它是有意义的


和have
角色的内容匹配
完全匹配
,没有参数,匹配的是空数组。之所以使用
字符串
类型参数,是因为否则编译器会抱怨它无法推断类型。

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

当前匹配空数组的方法(
specs2 3.8
)似乎是:

json must /("roles").andHave(exactly[String]())
这不是最好的方法,但这是我发现的唯一一种有效的方法,当我回过头来读的时候,它是有意义的


和have
角色的内容匹配
完全匹配
,没有参数,匹配的是空数组。之所以使用
字符串
类型参数,是因为否则编译器会抱怨它无法推断类型。

我想你已经尝试过
json must/(“角色”->“[]”)了
?就在我认为在整个互联网上可能找不到这样的问题的时候。你有完全相同的问题,也有很好的答案,耶!我想你已经试过了
json must/(“角色”->“[]”)
?就在我认为在整个互联网上可能找不到这样的问题的时候。你有完全相同的问题,也有很好的答案,耶!我的问题只是一个输入错误。JSON是有效的,问题是关于使用specs2 JSON匹配器确保值是空数组的语法。我可以发誓我已经尝试过了,但证据还在后面。这(当然)奏效了。非常感谢。我的问题只是一个输入错误。JSON是有效的,问题是关于使用specs2 JSON匹配器确保值是空数组的语法。我可以发誓我已经尝试过了,但证据还在后面。这(当然)奏效了。非常感谢。