【问题标题】:PHP Library to convert JSON to CSV?将 JSON 转换为 CSV 的 PHP 库?
【发布时间】:2012-03-23 07:47:35
【问题描述】:

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

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

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

或:

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

【问题讨论】:

  • 你能把this question反过来吗?
  • JSON 的结构是什么? JSON 可能具有非常复杂的嵌套结构,可能无法有意义地呈现为 csv。
  • 这并不像仅仅颠倒这些方法那么简单。感谢您的建议
  • 我现在正在使用结构编辑问题,尽管我需要更改方法以适应我们的服务。我只想要一个好例子

标签: php json csv data-export


【解决方案1】:

我一般同意评论者的观点,但如果你的数据是这样准备的,难道你只需要这个伪代码吗?

$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);

【讨论】:

  • 在我的情况下,我会在字段上投射(数组)。 PHP 5.3。
【解决方案2】:

假设你的 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 文件)

【讨论】:

    【解决方案3】:

    我只需要这样做。我编写了一个小命令行脚本,它以 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));
    }
    

    【讨论】:

      【解决方案4】:

      我多次遇到这个问题;这就是为什么我创建了一个名为 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);    
      

      【讨论】:

      • 嗨,您能否编辑您的问题以解释它是如何工作的?这条线use OzdemirBurak\JsonCsv\File\Json; 没有被正确读取,所以我无法访问像convert 这样的函数。你有一个可行的例子吗?我检查了你的github,它是一样的
      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 2022-06-13
      • 2014-04-21
      • 2017-12-17
      • 2015-08-23
      • 2019-08-21
      相关资源
      最近更新 更多