php生成标准json数组需确保数据结构合法、文件utf-8无bom、用json_encode($data, json_unescaped_unicode)输出中文,前置header('content-type: application/json; charset=utf-8'),并校验编码结果。

PHP生成并规范输出标准JSON数组,核心在于数据结构正确、编码统一、响应头设置恰当,避免中文乱码和语法错误。
确保数据是合法的PHP数组或对象
JSON只能序列化PHP中的关联数组(键名字符串)、索引数组、数字、字符串、布尔值和null。含资源、闭包、类实例或循环引用的数据会报错或被忽略。
- 用array()或[]构造纯数组,避免混用对象属性
- 中文键名或值无需特殊处理,但需保证源文件保存为UTF-8无BOM格式
- 若从数据库取数据,建议用fetch_all(MYSQLI_ASSOC)直接得到关联数组
使用json_encode()并传入关键选项
默认json_encode()对中文会转成\uXXXX格式,影响可读性;遇到空值或特殊字符可能输出失败。
- 加JSON_UNESCAPED_UNICODE让中文原样输出:json_encode($data, JSON_UNESCAPED_UNICODE)
- 调试时可加JSON_PRETTY_PRINT美化格式(上线环境建议关闭)
- 检查返回值是否为false,配合json_last_error_msg()定位问题
设置正确的HTTP响应头
前端能否正确解析JSON,不仅取决于内容,还依赖Content-Type响应头。
- 必须在echo前调用:header('Content-Type: application/json; charset=utf-8');
- 避免任何输出(包括空格、BOM、warning)出现在header()之前,否则报“headers already sent”
- 如需支持跨域,可追加:header('Access-Control-Allow-Origin: *');
完整示例:安全、可调试的标准写法
以下是一个生产可用的接口片段:
<?php header('Content-Type: application/json; charset=utf-8');
// 模拟业务数据
$data = [
'code' => 200,
'msg' => '操作成功',
'data' => [
['id' => 1, 'name' => '张三', 'city' => '北京'],
['id' => 2, 'name' => '李四', 'city' => '上海']
]
];
$json = json_encode($data, JSON_UNESCAPED_UNICODE);
if ($json === false) {
http_response_code(500);
echo json_encode(['code' => 500, 'msg' => 'JSON编码失败:' . json_last_error_msg()], JSON_UNESCAPED_UNICODE);
} else {
echo $json;
}
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











