PHP中无法用->操作符访问POST传递的JSON对象值问题求助
问题分析与解决方案
嘿,这问题其实很好理清!你之所以用->操作符访问会报错,核心原因就在json_decode的第二个参数设置上。
你看,你的PHP代码里写了:
$data = json_decode($employerdata, true);
这里的第二个参数true是明确告诉PHP:把JSON字符串解析成关联数组,而不是对象。所以$data本质是一个数组,自然不能用对象的->语法去访问属性,这就直接导致了Trying to get property of non-object的报错。
要想用->操作符访问,只需要把json_decode的第二个参数去掉(或者显式设为false,因为它的默认值就是false),这样解析后得到的就是一个stdClass对象了,刚好匹配你想要的面向对象访问风格。
修改后的PHP代码如下:
$employerdata = $_POST['employerdata']; // 去掉第二个参数true,默认返回对象 $data = json_decode($employerdata); // 现在可以正常用->访问属性了 var_dump($data->newemployeremail); echo $data->newemployeremail; echo $accessed = $data->newemployeremail; echo 'Hi';
最后再给你划个重点:
- 当
json_decode的$assoc参数设为true:返回关联数组,要用$data['key']的方式访问 - 当
$assoc参数设为false(默认):返回标准对象,要用$data->key的方式访问
这样调整后,就完全符合你从过程式转向面向对象风格的需求啦~
内容的提问来源于stack exchange,提问作者hnewbie
相关产品推荐
相关产品推荐

