PHP 如何返回 JSON
日常做网站或小程序开发时,经常会遇到需要让后端返回数据的场景——比如你在做一个天气查询工具,前端要拿到城市的温度、天气状况,后端怎么把这些数据准确传给前端呢?PHP里最常用的方式就是返回JSON格式的数据,它就像一个标准化的“数据快递盒”,前后端约定好格式,就不会出现数据传错、读不懂的问题。接下来就用生活化的例子,一步步讲清楚PHP返回JSON的方法。
先搞懂:JSON到底是什么?
很多人怕JSON是复杂的技术术语,其实它就是一种“结构化的字符串”,专门用来存简单的键值对数据,比如{"城市":"北京","温度":"22℃","天气":"晴"},就像你给朋友发消息,不说“我在外面,穿薄外套就行”,而是直接说“地点北京,温度22度,天气晴”,双方都能一眼看懂,不会有歧义。

第一步:用PHP数组“打包”数据
PHP里不能直接输出JSON,得先把要返回的数据放进数组里,就像你要寄快递,得先把东西放进快递盒里。比如做一个简单的用户信息返回,先写一个存数据的数组:
`php
// 这就是要返回给前端的用户数据,先放进PHP数组里
$userData = [
"name" => "小明",
"age" => 28,
"isVip" => true, // JSON里的布尔值,PHP里直接用true/false就行
"hobbies" => ["爬山", "看书", "打篮球"] // 数组可以直接转成JSON的数组
];
`
这个数组就像你整理好的“快递清单”,里面的每一项都是要传给前端的信息。
第二步:把PHP数组转成JSON格式
有了数组,接下来就是用PHP自带的函数把它转成JSON字符串,这个函数就是json_encode(),相当于把“快递清单”放进“标准化快递盒”里。直接调用这个函数就行,代码也很简单:
`php
// 把PHP数组转成JSON格式的字符串
$jsonData = json_encode($userData);
`
这里有个小细节要注意:如果数组里有中文,转出来的JSON可能会是乱码,比如{"name":"\u5c0f\u660e"},这时候只要给json_encode()加个参数就能解决:
`php
// 加JSON_UNESCAPED_UNICODE参数,避免中文乱码
$jsonData = json_encode($userData, JSON_UNESCAPED_UNICODE);
`
就像你寄快递时标注“这是中文文件,不用转成拼音”,快递盒能直接识别中文。
第三步:告诉前端“我要发的是JSON”
转成JSON字符串后,还需要告诉前端:“我现在发的是JSON格式的数据,你按这个格式读”,就像寄快递时贴“生鲜件”“文件件”的标签,前端才能正确解析。这一步要用到PHP的header()函数,设置响应头的类型:
`php
// 设置响应头为JSON格式,前端就能正确识别
header('Content-Type: application/json; charset=utf-8');
`
如果忘了这一步,前端可能会把JSON当成普通字符串输出,比如直接显示{"name":"小明","age":28},而不是解析成可用的对象,就像快递贴错标签,快递员当成普通包裹扔到驿站,你要花时间拆。
最后:把JSON数据输出给前端
设置好所有东西,最后一步就是把生成的JSON字符串输出,就像把贴好标签的快递交给快递员:
`php
// 输出JSON数据,完成返回
echo $jsonData;
`
把以上几步合起来,完整的代码就是:
`php
<?php
// 1. 准备要返回的数据,放进PHP数组
$userData = [
"name" => "小明",
"age" => 28,
"isVip" => true,
"hobbies" => ["爬山", "看书", "打篮球"]
];
// 2. 设置响应头,告诉前端是JSON格式
header('Content-Type: application/json; charset=utf-8');
// 3. 转数组为JSON字符串,输出
echo json_encode($userData, JSON_UNESCAPED_UNICODE);
?>
`
运行这个PHP文件,前端拿到的就是清晰可用的JSON数据,不会出现乱码或格式错误的问题。
其实PHP返回JSON的核心逻辑就是:先整理成PHP数组,转成标准化JSON字符串,告诉前端格式,再输出。只要跟着这个步骤走,就能轻松解决日常开发中大部分需要返回JSON的场景,比如返回列表、提交表单后的反馈、接口数据请求等,不用再担心数据传错的问题。