将JSON转换为CSV的PHP库?

10

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

以下是一个示例格式,尽管我希望必须通过改装解决方案来使其正常工作:

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

或:

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

1
你能否做这个问题的相反操作? - Matt Ellen
5
JSON 的结构可以非常复杂,嵌套层次很深,这可能无法以有意义的方式呈现为 CSV。 - Chris
https://dev59.com/hm445IYBdhLWcg3wia2V - Andrew Hall
不仅仅是简单地反转这些方法。感谢您的建议。 - wajiw
我正在编辑问题,尽管我无论如何都需要更改方法以适应我们的服务。我只是想要一个好的例子。 - wajiw
3个回答

13

我基本上同意评论者的观点,但是如果你的数据已经准备好了,那么这段伪代码难道不已足够吗?

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

1
在我的情况下,我需要对字段进行强制转换(数组)。PHP 5.3。 - Fedir RYKHTIK

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文件)。


2

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

你可以在这里查看:PHP将JSON数组转换为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));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接