json_encode()是唯一可靠生成标准json的方式,因php数组非json格式、手动拼接易出错、var_export()等函数输出非json,且需注意中文编码、空数组处理、nan/inf过滤、错误检查、响应头设置、文件编码及键名合法性。

json_encode() 是唯一可靠的方式,别用 print_r() 或字符串拼接模拟 JSON。
为什么不能直接 echo 数组
PHP 数组是内部数据结构,浏览器或调用方只认标准 JSON 格式。直接 echo $arr 会输出类似 Array 的字符串,或触发 Notice: Array to string conversion 警告。
- 数组本身不可序列化为字符串,PHP 会静默转成字面量
Array - 即使手动拼
"{...}",也极易漏转义双引号、换行、中文,导致 JSON 解析失败 -
var_export()和serialize()输出的都不是 JSON,前端JSON.parse()会直接报错
json_encode() 必须传的参数
默认行为在中文、空值、数字类型上容易出问题,必须显式控制:
- 中文乱码?加
JSON_UNESCAPED_UNICODE:json_encode($data, JSON_UNESCAPED_UNICODE) - 空数组变成
{}而不是[]?确保数组是索引数组(key 全为整数),否则 PHP 自动当对象处理 - 遇到
NaN或INF报错?提前过滤:array_filter($data, function($v) { return !is_nan($v) && !is_infinite($v); }) - 返回
null?用json_last_error()检查:if (json_last_error() !== JSON_ERROR_NONE) { die('JSON encode failed: ' . json_last_error_msg()); }
接口响应头和编码要同步设好
光有 JSON 字符串不够,HTTP 响应头和字符集不匹配,前端依然可能解析失败:
- 必须设置
header('Content-Type: application/json; charset=utf-8'); - 确保 PHP 文件本身是 UTF-8 编码(无 BOM),否则
json_encode()可能返回false - 如果用了输出缓冲(如
ob_start()),确认没意外输出空格或换行——json_encode()前任何输出都会让 JSON 失效
最常被忽略的是:数组键名含非法字符(比如空格、点号、斜杠)时,json_encode() 不报错但结果不可靠;务必用 array_keys() 检查并规范化键名。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











