PHP读取含JSON的文本文件并提取指定字段求助
解决方案
你的代码逻辑有误,没有先提取文件中的JSON片段,反而把整个文件内容转成了JSON,自然无法正确解析。以下是正确的实现步骤和代码:
步骤说明
- 读取整个文件内容
- 通过正则匹配提取文件中的JSON部分(从
{开始到}结束的完整片段) - 将提取到的JSON字符串解码为PHP数组
- 遍历员工数据,提取所需的
userId、jobTitleName和phoneNumber字段 - 输出处理后的结果
完整代码
<?php // 读取文件内容 $fileContent = file_get_contents("cluster.txt"); // 匹配文件中的JSON片段(匹配从{开始到}结束的完整内容) preg_match('/\{.*\}/s', $fileContent, $matches); if (empty($matches)) { die("未在文件中找到有效的JSON数据"); } $jsonStr = $matches[0]; // 解码JSON为关联数组 $employeeData = json_decode($jsonStr, true); if (json_last_error() !== JSON_ERROR_NONE) { die("JSON解码失败:" . json_last_error_msg()); } // 提取所需字段 $result = []; foreach ($employeeData['Employees'] as $employee) { $result[] = [ 'userId' => $employee['userId'], 'jobTitleName' => $employee['jobTitleName'], 'phoneNumber' => $employee['phoneNumber'] ]; } // 输出结果(可以选择JSON格式或打印数组) header('Content-type: application/json'); echo json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES); ?>
代码解释
preg_match('/\{.*\}/s', $fileContent, $matches):使用正则表达式匹配完整的JSON结构,/s修饰符让.匹配换行符,确保能匹配多行的JSONjson_decode($jsonStr, true):将JSON字符串转为PHP关联数组,方便后续操作- 遍历
Employees数组,只保留需要的三个字段,生成新的结果数组 - 最后用
json_encode输出格式化后的JSON结果,便于查看
内容的提问来源于stack exchange,提问作者Lia Barua
相关产品推荐
相关产品推荐

