PHP 如何接收 JSON 参数
在网站开发中,很多时候需要把前端输入的信息,比如用户填写的表单、选择的选项,打包成规范的 JSON 格式传给后端。比如一个做外卖小程序的商家,要把“订单号、餐品、配送地址”这些信息整理成 JSON 发给 PHP 后端,这时候 PHP 怎么正确接住这份数据,就成了关键的第一步。
很多新手刚接触这块时,会习惯性地用接收普通表单参数的方式来拿数据,比如用$_POST['参数名'],结果发现根本拿不到值。这是因为 JSON 参数和普通表单参数的传输方式不一样,普通表单是把数据当成键值对放在请求体里,而 JSON 是把整个数据当成一个整体字符串传输,所以得用专门的方法来解析。

第一步:先确认请求的“身份”
在拿数据之前,最好先确认前端传过来的是不是 JSON 格式的数据。很多时候后端出错,是因为前端不小心传了普通表单,或者格式写错了。可以在 PHP 里加一行简单的判断,比如用getallheaders()获取请求头,看看Content-Type是不是application/json——就像你点外卖时,先看外卖袋上的标签是不是“生鲜专属”,确认是正确的品类再处理,避免拿错。
第二步:读取 JSON 原始数据
普通表单数据是 PHP 自动解析好放进$_POST的,但 JSON 数据不会被自动解析,得手动读取请求体里的原始内容。PHP 提供了file_get_contents('php://input')这个方法,就像你拆开外卖袋,把里面的餐品倒出来检查一样,它能拿到前端传过来的一整段 JSON 字符串。举个例子,如果前端传的 JSON 是{"order_id":"12345","food":"宫保鸡丁"},用这个方法拿到的就是'{"order_id":"12345","food":"宫保鸡丁"}'。
第三步:把 JSON 字符串转成 PHP 能懂的数组
拿到原始的 JSON 字符串后,它还只是一串文本,没法直接用,得转成 PHP 里的数组或者对象。这时候要用json_decode()这个函数,它就像“翻译官”,把 JSON 的“外语”翻译成 PHP 的“母语”。比如刚才的 JSON 字符串,用json_decode($rawData, true)(第二个参数设为true是转成数组,不设的话会转成对象),就能得到这样的 PHP 数组:
`php
array(
'order_id' => '12345',
'food' => '宫保鸡丁'
);
`
如果翻译失败,比如前端传的 JSON 格式写错了,少了引号或者多了逗号,json_decode()会返回null,这时候可以用json_last_error()看看错误原因,就像翻译时遇到看不懂的单词,要查字典一样。
第四步:简单例子串起来理解
假设我们做一个简单的用户信息提交接口,前端用 fetch 传 JSON:
`javascript
fetch('/api/submit', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({name: '小明', age: 20})
});
`
对应的 PHP 接收代码就可以这么写:
`php
// 读取原始数据
$rawJson = file_get_contents('php://input');
// 转成数组
$userData = json_decode($rawJson, true);
// 检查是否成功
if ($userData && isset($userData['name'])) {
echo "收到用户:" . $userData['name'];
} else {
echo "数据错误";
}
`
这样就能正确拿到前端传的“小明”这个名字了。
最后还要注意,实际开发中最好加数据校验,比如判断年龄是不是数字、姓名有没有特殊字符,就像你收到外卖,除了看品类对不对,还要检查餐品有没有洒漏,避免后续逻辑出错。