为什么对该JSON字符串使用json_decode会返回null值?
问题根因及修复方案
核心错误原因
- 引号嵌套冲突:你提交的请求体外层用双引号包裹,内部JSON字段也用双引号定义,
item={后的第一个双引号会直接闭合外层字符串,导致后续内容完全不符合JSON语法规范,触发解析错误。 - 格式混用错误:你传递的请求体本质是
application/x-www-form-urlencoded格式的表单参数串,并非纯JSON字符串,直接传入json_decode解析必然失败。 - 实体编码未处理:参数中的
&是HTML转义后的分隔符,未解码的情况下无法被识别为表单参数的分隔标记,会导致参数拆分错误。
修复步骤
你可以按照以下流程处理请求体:
- 先对原始请求体做HTML实体解码,把
&转为正常的&分隔符 - 用
parse_str解析表单格式的参数,提取出item字段的独立JSON内容 - 单独对
item字段的内容做json_decode解析
示例代码
// 读取原始请求体 $rawInput = file_get_contents('php://input'); // 解码HTML实体 $decodedInput = htmlspecialchars_decode($rawInput); // 解析表单参数 parse_str($decodedInput, $formData); // 解析JSON字段 $itemInfo = json_decode($formData['item'], true); // 打印验证结果 var_dump($itemInfo);
传参优化建议
如果是前端发起请求,两种规范传参方式可选,避免后续出现同类问题:
- 用纯JSON格式传参:直接将完整JSON串作为请求体提交,后端不需要做表单解析,直接对原始请求体做
json_decode即可 - 用表单格式传参:提交前对JSON内容做URL编码,避免特殊字符和引号冲突
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

