You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel控制器解析请求JSON数组访问Project属性报错如何解决

解决方案

问题根源

  • 你提供的JSON存在语法错误:每个对象末尾的email字段后多了多余逗号,数组最后一个元素末尾也多了逗号,导致json_decode解析失败返回null,访问null的Project属性就会触发非对象属性读取错误
  • 你写的验证规则与请求参数结构不匹配:验证规则默认校验请求根节点的字段,但你的字段都嵌套在Project数组内,所以会一直提示字段必填
  • Laravel已内置JSON请求解析能力,不需要手动读取$request->getContent()再解码,只要请求头携带正确的Content-Type: application/json即可直接通过请求实例取值

修复步骤

1. 修正JSON语法

删除所有多余逗号,正确JSON如下:

{"Project": [
  {
    "name": "Project1",
    "category": "Web",
    "total_maintenance": "0",
    "maintenance_start": "2021-11-01",
    "maintenance_end": "2021-11-10",
    "email": "test12323@test.com"
  },
  {
    "name": "Project1",
    "category": "Mobile",
    "total_maintenance": "0",
    "maintenance_start": "2021-11-01",
    "maintenance_end": "2021-11-10",
    "email": "test12323@test.com"
  }
]}

2. 调整Postman请求配置

POST请求的Body选择raw,格式切换为JSON,系统会自动为请求加上Content-Type: application/json请求头,将修正后的JSON填入请求体即可。

3. 修正Laravel代码

public function store(Request $request)
{
    // 适配嵌套数组的验证规则
    $validated = $request->validate([
        'Project' => 'required|array',
        'Project.*.name' => 'required',
        'Project.*.category' => 'required',
        'Project.*.total_maintenance' => 'required',
        'Project.*.maintenance_start' => 'required|date',
        'Project.*.maintenance_end' => 'required|date',
        'Project.*.email'=> 'required|email',
    ]);

    // 直接读取对应字段,不需要手动解码
    $firstProjectName = $request->input('Project.0.name');
    // 如果习惯对象写法,可以用以下方式
    $allProjects = $request->collect('Project')->toBase();
    $firstProjectName = $allProjects[0]->name;

    Log::info($firstProjectName);
    
    // 后续业务逻辑
}

如果你确实需要手动解码,可以加判断避免报错:

$decoded = json_decode($request->getContent());
if (json_last_error() === JSON_ERROR_NONE && isset($decoded->Project)) {
    Log::info($decoded->Project[0]->name);
}

内容的提问来源于stack exchange,提问作者ander99

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 03:24:02