
PHP读取JSON文件并解析,核心是先用 file_get_contents() 读取文件内容,再用 json_decode() 转成 PHP 变量。关键在于处理编码、错误和数据结构。
确保 JSON 文件格式正确且编码为 UTF-8
JSON 文件必须是合法的 JSON 格式(双引号、无尾逗号、字符串键名等),且文件保存为 UTF-8 无 BOM 格式。否则 json_decode() 会返回 null 且不报错。
- 可用在线工具(如 jsonlint.com)校验 JSON 语法
- 用编辑器(如 VS Code、Notepad++)确认文件编码是 UTF-8
- PHP 中可加判断:
if (json_last_error() !== JSON_ERROR_NONE) { echo json_last_error_msg(); }
读取并解码 JSON 文件
推荐写法(带错误检查):
$jsonFile = 'data.json';
$content = file_get_contents($jsonFile);
if ($content === false) {
die("无法读取文件: $jsonFile");
}
$data = json_decode($content, true); // 第二个参数 true → 返回关联数组
if (json_last_error() !== JSON_ERROR_NONE) {
die("JSON 解析失败: " . json_last_error_msg());
}
// 现在 $data 是 PHP 数组,可直接使用
print_r($data);
区分对象与数组:第二个参数的作用
json_decode($json, $assoc) 的第二个参数决定返回类型:
-
true→ 返回关联数组(推荐,便于遍历和取值,如$data['name']) -
false(默认)→ 返回 stdClass 对象(需用对象语法,如$data->name) - 注意:嵌套结构中,数组/对象类型会统一受该参数影响
常见问题快速排查
如果 $data 是 null,大概率是以下原因:
- 文件路径错误或权限不足(检查
file_get_contents是否返回false) - JSON 内容含中文但文件不是 UTF-8 编码(特别是 Windows 记事本默认 ANSI)
- JSON 中有不可见字符(如 BOM、多余空格、制表符)
- 使用了单引号代替双引号,或键名没加引号(JSON 规范强制要求双引号)
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











