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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 15:24:02