PHP开发REST API时提取JSON POST字段报500错误的正确写法
错误原因
你当前的写法存在两个核心问题:
json_decode()默认返回stdClass类对象,不能使用数组的[]语法读取属性- 你提交的JSON顶层是单个对象,没有被数组包裹,不存在
$data[0]这个索引位
正确写法
写法1:使用默认返回的对象语法取值
$json = file_get_contents('php://input'); $data = json_decode($json); // 使用 -> 语法读取对象属性 $email = $data->email; $fname = $data->fname; print "email: $email fname: $fname";
写法2:转为关联数组后用数组语法取值
如果习惯用数组操作,可以给json_decode()传入第二个参数true,返回值会自动转为关联数组:
$json = file_get_contents('php://input'); // 第二个参数设为true,解析结果为关联数组 $data = json_decode($json, true); // 直接按键名读取即可,不需要加[0] $email = $data["email"]; $fname = $data["fname"]; print "email: $email fname: $fname";
优化建议
生产环境建议增加校验逻辑,避免非法请求触发500错误:
$json = file_get_contents('php://input'); $data = json_decode($json); // 校验JSON格式合法性 if (json_last_error() !== JSON_ERROR_NONE) { http_response_code(400); exit("请求体格式错误"); } // 校验必填字段是否存在 if (!isset($data->fname, $data->email)) { http_response_code(400); exit("缺少必填字段fname或email"); } // 后续业务逻辑 $email = $data->email; $fname = $data->fname; print "email: $email fname: $fname";
内容的提问来源于stack exchange,提问作者Viktor
相关产品推荐
相关产品推荐

