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

PHP获取含嵌套集合的请求体并正确解析问题求助

问题:JSON请求体嵌套数组解析异常,得到序列化字符串而非原JSON结构

场景复现

通过Postman发送的请求体:

{
   "title": "foo",
   "colors": [{
       "name": "green"
   }, {
       "name": "red"
   },{
       "name": "pink"
   }]
}

PHP后端(Symfony框架)获取请求体的代码:

use Symfony\Component\HttpFoundation\Request;

public function test (Request $request)
{
    $data = json_decode($request->getContent(), false);
    
    dd($data->title); // 正常输出"foo"
    // 但获取$data->colors时得到序列化字符串:a:1:{i:0;s:2:"green";i:1;s:2:"red";i:2;s:2:"pink";}
    // 期望得到JSON格式字符串:[{"name": "green"}, ... ]
}

解决方案

1. 确认请求头设置正确

确保Postman的请求头中设置了Content-Type: application/json,这是Symfony自动解析JSON请求体的前提。如果未设置,Symfony会把请求体当作表单数据处理,嵌套数组会被自动序列化为字符串。

2. 使用Symfony Request内置方法解析(推荐)

Symfony的Request对象会根据请求头自动解析JSON数据,无需手动调用json_decode($request->getContent()),直接用以下方式获取正确结构:

use Symfony\Component\HttpFoundation\Request;

public function test(Request $request)
{
    // 方式1:获取解析后的关联数组,再转成JSON字符串
    $data = $request->toArray();
    $colorsJson = json_encode($data['colors']);
    dd($colorsJson); // 输出期望的[{"name":"green"},{"name":"red"},{"name":"pink"}]

    // 方式2:直接获取colors字段,再转JSON
    $colors = $request->get('colors');
    $colorsJson = json_encode($colors);
    dd($colorsJson);
}

3. 若必须手动解析请求体

如果因为特殊场景需要手动处理$request->getContent(),请先确保请求体是原始JSON字符串,再进行解析:

use Symfony\Component\HttpFoundation\Request;

public function test(Request $request)
{
    $content = $request->getContent();
    // 先验证内容是否为有效JSON
    if (json_validate($content)) {
        $data = json_decode($content, true); // 转关联数组
        $colorsJson = json_encode($data['colors']);
        dd($colorsJson);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:41