如何验证 json 对象中的 JSON 对象数组?

Posted

技术标签:

【中文标题】如何验证 json 对象中的 JSON 对象数组?【英文标题】:How do I validate an array of JSON objects in a json object? 【发布时间】:2021-05-18 00:34:36 【问题描述】:

我正在发送一个 JSON 对象数组,我将这些对象与其他数据一起发布到数据库:


   "emotions":[
      
         "id":1,
         "intensity":67,
         "new_intensity":67
      ,
      
         "id":2,
         "intensity":67,
         "new_intensity":67
      ,
      
         "id":3,
         "intensity":64,
         "new_intensity":64
      ,
      
         "id":4,
         "intensity":64,
         "new_intensity":64
      ,
      
         "id":5,
         "intensity":64,
         "new_intensity":64
      
   ],
   "situation":"An event",
   

我想要做的是验证situationemotions[,] json 数组:

控制器

public function store(Request $request)

   $this->validate($request, [
      'situation' => 'required',
   ]); 
   $data = ['data' => $request->input('emotions')];
   $this->validate($data, [
      'data.*.id' => 'digits:2|between:1,70',
      'data.*.intensity' => 'digits:3|between:1,100',
      'data.*.new_intensity' => 'digits:3|between:1,100'
   ]);

错误

传递给 App\Http\Controllers\Controller::validate() 的参数 1 必须是 Illuminate\Http\Request 的实例,给定数组

我希望能够结合这两种验证方法,但我也不知道如何做到这一点?

Here is the answer I got my first try from

【问题讨论】:

【参考方案1】:

您可以使用array validators。下面的代码可能会帮助您实现这一目标

$validator = Validator::make($data, [
      'data.*.id' => 'digits:2|between:1,70',
      'data.*.intensity' => 'digits:3|between:1,100',
      'data.*.new_intensity' => 'digits:3|between:1,100'
   ])

您可以检查它是否失败并执行您想要的操作

if($validator->fails())
    // Do something

【讨论】:

以上是关于如何验证 json 对象中的 JSON 对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Newtonsoft.Json 将包含数组数组的 json 对象解析为 C# 中的对象列表?

如何在不使用 C# 中的 T 对象的情况下将 Json 数组转换为单个 JSON 对象?

如何从 JSON 数组中的 JSON 对象中的单个值获取数据?

如何从 alamofire 中的 json 数组中获取对象?

如何访问 JSON 对象中的数组?

QT如何解析数组json中的对象