【问题标题】:Read a text file and extract some of element in php读取文本文件并提取 php 中的一些元素
【发布时间】:2023-02-21 22:26:00
【问题描述】:

我有一个文本文件。我想读取文件并从元素中获取一些数据。当我阅读此文件时,它可能是返回字符串(我不确定)。该文件包含一些数据,例如以下内容:

Can we get Prism Cluster Mail in summarize way like below. 

----------------------------------------------------------------

{
"Employees" : [
{
"userId":"rirani",
"jobTitleName":"Developer",
"firstName":"Romin",
"lastName":"Irani",
"preferredFullName":"Romin Irani",
"employeeCode":"E1",
"region":"CA",
"phoneNumber":"408-1234567",
"emailAddress":"romin.k.irani@gmail.com"
},
{
"userId":"nirani",
"jobTitleName":"Developer",
"firstName":"Neil",
"lastName":"Irani",
"preferredFullName":"Neil Irani",
"employeeCode":"E2",
"region":"CA",
"phoneNumber":"408-1111111",
"emailAddress":"neilrirani@gmail.com"
},
{
"userId":"thanks",
"jobTitleName":"Program Directory",
"firstName":"Tom",
"lastName":"Hanks",
"preferredFullName":"Tom Hanks",
"employeeCode":"E3",
"region":"CA",
"phoneNumber":"408-2222222",
"emailAddress":"tomhanks@gmail.com"
}
]
}

我想提取 userId、jobTitleName 和 phoneNumber。我怎样才能做到这一点?我是 php 的新手。我试过以下代码。但它不能正常工作。有人可以帮忙吗?

header('Content-type: application/json');   
    $data = preg_split("/\r\n/", file_get_contents("cluster.txt")); 
    $dt= json_encode($data, JSON_UNESCAPED_SLASHES);
    $final_dt=stripslashes($dt);
    $final_dt_arr=json_decode($final_dt,true);
    //echo "<pre>"; print_r($final_dt_arr);
    echo $final_dt;

【问题讨论】:

  • 我不明白你的尝试首先应该与提取数据的问题有什么关系?为什么要将其拆分成单独的行,然后再次进行 JSON 编码和解码?
  • 请仔细阅读How to extract and access data from JSON with PHP? 上接受的答案,然后将您学到的概念应用到您尝试从您自己的 JSON 获取数据的过程中
  • 只是为了清楚 - 文本“我们能不能……”和下面的---- 行实际上是您文件内容的一部分,是吗?然后你应该拆分那些,然后将其余部分解码为有效的 JSON。
  • 实际上我是 php 的新手,不知道我该怎么做?
  • 这就是为什么我给你一个指南来学习原则!确保您也了解 PHP 数组的一般知识。如果你学会了原理,那么你就可以应用它们,然后你就可以解决这个场景以及以后所有相关的场景。

标签: php arrays json


【解决方案1】:

我看一下你上面的脚本,你已经使用了json_decode,这是一个好的开始。 你能试试下面的代码(我的大部分项目)使用它吗:

// Read the JSON file into a string
$json_string = file_get_contents('urjsonfile.json');

// Decode the JSON string into a PHP object
$data = json_decode($json_string);

// Extract the desired data from the object
foreach ($data->Employees as $employee) {
    $userId = $employee->userId;
    $jobTitleName = $employee->jobTitleName;
    $phoneNumber = $employee->phoneNumber;

    // Do something with the extracted data, such as print it out
    echo "User ID: $userId, Job Title: $jobTitleName, Phone Number: $phoneNumber
";
}
  1. file_get_contents()函数将JSON文件读入字符串
  2. 使用json_decode()解码为PHP对象
  3. foreach 循环然后遍历雇员对象中的数组,提取所需的数据。

    您还可以将第二个参数作为 true 传递,以返回关联数组。

【讨论】:

  • 我不会读取 json 文件。我必须阅读文本文件。虽然我使用 file_get_contents 并解码此数据,但它不会返回任何内容。
  • @LiaBarua JSON 是以文本格式存储的数据。文件扩展名是 .txt 还是 .json 并不重要。如果你真的愿意,你甚至可以称它为 .jpg 或 .docx 或 .mp3,但如果文件中的内容仍然是 JSON 格式的文本,那么什么都不会改变,你仍然可以用同样的方式阅读它。
  • 如果它没有返回任何内容,则可能是您文件中的 JSON 无效。您是否尝试使用例如验证您的文件jsonlint
  • 哦,对不起。我从不尝试通过 txt 文件获取数据,因为你不能直接使用 json_decode() 函数对其进行解码,我编辑了我的答案,但不确定是否有效:)
  • @da_root 不,为什么有必要?你怎么想象它会起作用?解码 JSON 很简单……每次都使用json_decode。您只需要有效的 JSON。如果该文件不包含有效的 JSON,则修复该文件。
【解决方案2】:

据我了解你的问题。我分享了我的答案。希望它可能有所帮助。

PHP

header('Content-type: application/json');   
// $data = preg_split("/
/", file_get_contents("cluster.txt")); 
$data = file_get_contents("cluster.txt"); 
$_arrdata = json_decode($data, true);

$result_array = [];
foreach( $_arrdata['Employees'] as $key=>$cluster ){
  $result_array[$key]['userId'] = $cluster['userId'];
  $result_array[$key]['jobTitleName'] = $cluster['jobTitleName'];
  $result_array[$key]['phoneNumber'] = $cluster['phoneNumber'];
}

print_r($result_array);

输出将如下所示。

Array
(
    [0] => Array
        (
            [userId] => rirani
            [jobTitleName] => Developer
            [phoneNumber] => 408-1234567
        )

    [1] => Array
        (
            [userId] => nirani
            [jobTitleName] => Developer
            [phoneNumber] => 408-1111111
        )

    [2] => Array
        (
            [userId] => thanks
            [jobTitleName] => Program Directory
            [phoneNumber] => 408-2222222
        )

)

【讨论】:

  • 这种方法也有效:3v4l.org/KqXqi,尽管 OP 确实询问了如何提取某些特定字段,而不仅仅是转储整个数组。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-01
  • 1970-01-01
相关资源
最近更新 更多