Php 验证JSON请求是一个数组,而不是一个对象

Php 验证JSON请求是一个数组,而不是一个对象,php,laravel,validation,Php,Laravel,Validation,我正试图找到一种方法,使用本机Laravel验证器,要求只传递一个JSON数组作为请求的根。不管根是JSON对象还是数组,传入的JSON数据都会自动转换为PHP数组,这使得转换变得困难。Laravel的验证器只用于验证数组的值,而不是数组本身 例如,我想确保这是可以接受的: [ { "field": "value" } ] 但这一点遭到拒绝: { "anything": { "field": "value" } } 一个简单的验证规则,如'*.field'=>

我正试图找到一种方法,使用本机Laravel验证器,要求只传递一个JSON数组作为请求的根。不管根是JSON对象还是数组,传入的JSON数据都会自动转换为PHP数组,这使得转换变得困难。Laravel的验证器只用于验证数组的值,而不是数组本身

例如,我想确保这是可以接受的:

[
  {
    "field": "value"
  }
]
但这一点遭到拒绝:

{
  "anything": {
    "field": "value"
  }
}
一个简单的验证规则,如
'*.field'=>'required | string'
对数组的内容很有效,但无法区分两者。我想也许我可以做
'=>'required | array'
,但这失败了,因为它只是尝试用一个空字符串作为其键来验证数组值,这是一件有效的事情(谢谢,PHP!)

我提出的最佳解决方案是使用正则表达式手动测试原始的、编码的JSON数据,但这似乎很粗糙,而且据我所知,无法与验证器集成。另一个可能的选项是检查
Arr::isAssoc(request()->all())
,但这同样存在同样的问题

下面的验证器规则是一个非常粗糙的解决方案,它仍然无法捕获包含整数字符串的键的对象,因为出于某种原因,验证器将数组索引(它认为是“属性”)转换为字符串

“*”=>[静态函数($attribute、$value、$fail){
如果(!ctype_digit($attribute)){
$fail('请求必须是数组,而不是对象');
}
}],