繁体   English   中英

PHP 库将 JSON 转换为 CSV?

[英]PHP Library to convert JSON to CSV?

我有一个 JSON 服务,需要创建一个脚本来将数据导出到 CSV 文件。 有没有人可以建议将 JSON 迁移到 CSV 格式的方法或库?

这是一个示例格式,但我希望必须改进解决方案才能使用它:

{"service_name":
      { key : value, key : value....}
}

或者:

{"service_name":
        [
               { key : value, key : value....},
               ...
         ]
}

我通常同意评论者的意见,但是如果您的数据是这样准备的,那么您只需要这个伪代码吗?

$json_str = "{'aintlist':[4,3,2,1], 'astringlist':['str1','str2']}";

$json_obj = json_decode ($json_str);

$fp = fopen('file.csv', 'w');

foreach ($json_obj as $fields) {
    fputcsv($fp, $fields);
}

fclose($fp);

我只需要做同样的事情。 我写了一个小的命令行脚本,它将json文件作为参数并输出CSV。

您可以在这里查看: PHP Converting JSON array to CSV

那里的重要人员使用数组的键作为 CSV 文件的第一行。 并保持下一个元素的顺序,以免弄乱 CSV。

这是代码:

if (empty($argv[1])) die("The json file name or URL is missed\n");
$jsonFilename = $argv[1];

$json = file_get_contents($jsonFilename);
$array = json_decode($json, true);
$f = fopen('php://output', 'w');

$firstLineKeys = false;
foreach ($array as $line)
{
    if (empty($firstLineKeys))
    {
        $firstLineKeys = array_keys($line);
        fputcsv($f, $firstLineKeys);
        $firstLineKeys = array_flip($firstLineKeys);
    }
    // Using array_merge is important to maintain the order of keys acording to the first element
    fputcsv($f, array_merge($firstLineKeys, $line));
}

假设您的 JSON 是一个没有数组或嵌入对象的数据集数组,这样的事情应该可以工作:

$file = file_get_contents('http://example.com/blah/blah');
$json = json_decode($file);

$csvfile = fopen('file.csv', 'w+');
foreach ($json as $row) {
    $line = "'" . join("\",\"", $row) . "\"\n";
    fputs($csvfile, $line);
}
fclose($csvfile);

您必须添加适当的错误处理。 尝试执行此类操作时可能会出现很多问题(即 JSON 文件不可用或格式错误,无法创建新的 CSV 文件)

我多次遇到这个问题; 这就是为什么我创建了一个名为ozdemirburak/json-csv的库,它可以将 JSON 转换为 CSV,反之亦然; 因此,它可以处理嵌套结构。

$ composer require ozdemirburak/json-csv

要使用它:

use OzdemirBurak\JsonCsv\File\Json;

$json = new Json($inputFilePath);
$csvString = $json->convert();
// you can also save the CSV string to a file.
$json->convertAndSave($outputFilePath);    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM