PHP无法处理非$_POST方式的JSON格式POST数据问题求助
解决嵌套JSON字符串解析问题
核心问题分析
你获取的php://input内容是被错误包裹的嵌套字符串——请求端实际发送的是var_dump的输出结果,而非纯JSON数据,导致无法直接解析。
解决步骤
- 获取并清理原始输入
$rawInput = trim(file_get_contents('php://input'));
用trim()去除前后多余空格,避免干扰后续匹配。
- 提取内层纯JSON字符串
使用正则表达式匹配被双引号包裹的JSON结构,这种方法适配不同长度的内容,比固定截取更可靠:
preg_match('/"({.*})"/', $rawInput, $matches);
- 解析JSON并访问目标字段
检查匹配结果,成功提取后用json_decode解析,按需转为数组或对象:
if (isset($matches[1])) { // 转为关联数组,通过$data['job_uid']访问 $dataArray = json_decode($matches[1], true); echo $dataArray['job_uid']; // 输出12345 // 或者转为对象,通过$data->job_uid访问 $dataObj = json_decode($matches[1]); echo $dataObj->job_uid; // 输出12345 }
根源优化建议
如果能接触到请求发送端,建议修正发送逻辑:直接发送纯JSON数据(同时设置请求头Content-Type: application/json),不要将var_dump的输出作为请求体发送,从根源避免此类问题。
内容的提问来源于stack exchange,提问作者scott
相关产品推荐
相关产品推荐

