我如何使用PHP将文本文件转换为JSON?

问题描述 投票:-2回答:1

我在这样的文本文件中有数据:

data1
data1
data1
data1
data1
data1
data1
data1
data2
data2
data2
data2
data2
data2
data2
data2
data3
data3
data3
data3
data3
data3
data3
data3

文件可以包含任意数量的行,但是数据始终位于8行部分中。我想要的输出是有效的JSON,如下所示:

{
"data": [
    [
        "data1",
        "data1",
        "data1",
        "data1",
        "data1",
        "data1",
        "data1",
        "data1"
    ],
    [
        "data2",
        "data2",
        "data2",
        "data2",
        "data2",
        "data2",
        "data2",
        "data2"
    ],
    [
        "data3",
        "data3",
        "data3",
        "data3",
        "data3",
        "data3",
        "data3",
        "data3"
    ]
]

}

我曾尝试设计一个php脚本来做到这一点,但是我对PHP绝望了,我几乎是他们的朋友,但无法正确设置格式。

$tdcount = 1; $numtd = 8; // number of cells per row
$str = "{
    \"data\": [

     ";
$f = fopen("data.txt", "r");
if ( $f === FALSE ) {
    exit;
}

 while (!feof($f)) {
     $arrM = explode(",",fgets($f));
     $row = current ( $arrM );
     if ($tdcount == 1)
         $str .= "["; $str .= "\"$row\"";
     if ($tdcount == $numtd) {
         $str .= "]";
         $tdcount = 1;
     } else {
         $tdcount++;
     }
 }

 $str .= "] ] }";
 echo $str;
 exit;
?>

因此,我想知道他们是否更容易做到这一点,并且满足我要求的任何示例解决方案都很好。

php json
1个回答
0
投票

2件事-首先是不要尝试构建自己的JSON,这会很快导致问题。其次是尝试使用一些内置函数来简化编码(代码中的注释)...

$numtd = 8;

// read the file into an array
$data = file("data.txt", FILE_IGNORE_NEW_LINES );

// use trim to remove any spaces
$data = array_map("trim", $data);

// array_chunk to split it into parts, output with json_encode
echo json_encode( ["data" => array_chunk($data, $numtd)], JSON_PRETTY_PRINT );
© www.soinside.com 2019 - 2024. All rights reserved.