gpt4 book ai didi

php - 使用 PHP 将 JSON 转换为 CSV 格式

转载 作者:行者123 更新时间:2023-12-03 00:11:15 24 4
gpt4 key购买 nike

我正在尝试使用 php 脚本将 json 文件转换为 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('output.csv', 'w');

$firstLineKeys = false;
foreach ($array as $line)
{
if (empty($firstLineKeys))
{
$firstLineKeys = array_keys($line);
fputcsv($f, $firstLineKeys);
$firstLineKeys = array_flip($firstLineKeys);
}

fputcsv($f, array_merge($firstLineKeys, $line));

}

这种方法可行,但仅返回 JSON 文件的外部变量,并且收到“数组到字符串转换”警告

JSON 数据如下所示:

{"type":"NON_ATTRIBUTED","conversion":{,"value_1":"000000100355321","value_3":"XXXX","value_4":"12667","value_5":"6"},"stream_type":"COOKIE"}
{"type":"ATTRIBUTED","conversion":{,"value_1":"000000167865321","value_3":"YYYY","value_4":"12668","value_5":"0"},"stream_type":"COOKIE"}
{"type":"NON_ATTRIBUTED","conversion":{,"value_1":"000000134535321","value_3":"AAAA","value_4":"12669","value_5":"9"},"stream_type":"COOKIE"}
{"type":"NON_ATTRIBUTED","conversion":{,"value_1":"000000100357651","value_3":"WWWW","value_4":"12670","value_5":"2"},"stream_type":"COOKIE"}

我得到的输出是:类型、转换、stream_typeNON_ATTRIBUTED、数组、COOKIENON_ATTRIBUTED,数组,COOKIE

我期望的输出是:类型、转换、value_1、value_3、value_4、value_5、stream_typeNON_ATTRIBUTED,000000100355321, XXXX, 1267, 6, COOKIE..

感谢任何帮助,因为这对我来说很新

最佳答案

json_decode($json, true);将 JSON 对象转换为关联数组。所以这个

{
"type":"NON_ATTRIBUTED",
"conversion":{,
"value_1":"000000100355321",
"value_3":"XXXX",
"value_4":"12667",
"value_5":"6"
},
"stream_type":"COOKIE"
}

变成这样:

array(3) { 
["type"]=> string(14) "NON_ATTRIBUTED"
["conversion"]=> array(4) {
["value_1"]=> string(15) "000000100355321"
["value_3"]=> string(4) "XXXX"
["value_4"]=> string(5) "12667"
["value_5"]=> string(1) "6"
}
["stream_type"]=> string(6) "COOKIE"
}

如您所见,有嵌套数组。并且您尝试使用以下行将数组的所有元素插入到文本文件(csv 只是一个简单的文本文件):

fputcsv($f, array_merge($firstLineKeys, $line));

当数组元素是字符串时,效果很好。但是当元素是数组时,我们得到了数组到字符串的转换。因此,您必须在嵌套数组上使用loop或array_merge来防止这种情况发生。

我无法清楚地理解您的 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('output.csv', 'w');

$firstLineKeys = false;
foreach ($array as $line)
{
if (empty($firstLineKeys))
{
$firstLineKeys = array_keys($line);
fputcsv($f, $firstLineKeys);
$firstLineKeys = array_flip($firstLineKeys);
}
$line_array = array($line['type']);
foreach ($line['conversion'] as $value)
{
array_push($line_array,$value);
}
array_push($line_array,$line['stream_type']);
fputcsv($f, $line_array);

}

您的 json 中还有一个错误 - 不需要的逗号:"conversion":{,

关于php - 使用 PHP 将 JSON 转换为 CSV 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20667418/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com