You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP读取含JSON的文本文件并提取指定字段求助

解决方案

你的代码逻辑有误,没有先提取文件中的JSON片段,反而把整个文件内容转成了JSON,自然无法正确解析。以下是正确的实现步骤和代码:

步骤说明

  1. 读取整个文件内容
  2. 通过正则匹配提取文件中的JSON部分(从{开始到}结束的完整片段)
  3. 将提取到的JSON字符串解码为PHP数组
  4. 遍历员工数据,提取所需的userId、jobTitleName和phoneNumber字段
  5. 输出处理后的结果

完整代码

<?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修饰符让.匹配换行符,确保能匹配多行的JSON
  • json_decode($jsonStr, true):将JSON字符串转为PHP关联数组,方便后续操作
  • 遍历Employees数组,只保留需要的三个字段,生成新的结果数组
  • 最后用json_encode输出格式化后的JSON结果,便于查看

内容的提问来源于stack exchange,提问作者Lia Barua

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 15:10:16