PHP读取JSON文件填充班级通信录需用file_get_contents()配合json_decode($json, true)转关联数组,校验UTF-8编码、字段名一致性、空值处理及SQL安全绑定。
直接用 file_get_contents() 读取 JSON 文件,再用 json_decode() 转成 PHP 数组即可。注意默认返回对象,加第二个参数 true 才得关联数组,更适合后续遍历填表单或渲染列表。
json_last_error() 可能返回 JSON_ERROR_UTF8
__DIR__ . '/data/contacts.json'
json_decode() 返回值是否为 null,再调用 json_last_error() 判断具体错误类型如果通信录需要显示 name、student_id、phone、email,那 JSON 里对应字段名必须一致,且每条记录是关联数组(非索引数组嵌套)。常见翻车点:JSON 里写成 "stu_id" 或 "tel",PHP 侧却硬按 student_id 和 phone 取值,结果全为 null。
isset($item['name']) && isset($item['student_id'])
array_key_exists() 区分 null 和未定义"138-1234-5678"),需提前用 preg_replace('/[^0-9]/', '', $phone) 清洗不能把原始 JSON 数据直接拼进 SQL。即使用了 PDO,也要对每个字段单独绑定参数,尤其 name 含中文或单引号时,不处理会报错或被注入。
trim(htmlspecialchars($name, ENT_QUOTES, 'UTF-8')) 防 XSS,入库前再用 PDO 绑定"0023" → 23)INSERT INTO ... VALUES (),(),() 比循环单条 INSERT 快 5–10 倍,但要注意 MySQL 的 max_allowed_packet 限制有些编辑器保存 JSON 时会在末尾加空行或零宽空格(U+200B),json_decode() 无法容忍,但 json_last_error() 可能返回 JSON_ERROR_SYNTAX 而非更具体的提示。
echo htmlspecialchars(file_get_contents($path)) 看源码有没有异常符号mb_detect_encoding($json, ['UTF-8', 'GB2312'], true) 确认编码,再 mb_convert_encoding() 强制转 UTF-8preg_replace('/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/', '', $json) 清掉控制字符class_name,而数据库表字段是 grade,这种映射关系必须显式声明,不能靠命名猜测。