将Json转换为CSV的PHP脚本
我有一个API JSON服务,需要创建一个脚本将数据导出到CSV文件。 有人有php脚本将JSON迁移到CSV格式吗 示例Json文件将Json转换为CSV的PHP脚本,php,json,csv,Php,Json,Csv,我有一个API JSON服务,需要创建一个脚本将数据导出到CSV文件。 有人有php脚本将JSON迁移到CSV格式吗 示例Json文件 {"packWidth":200, "itemNo":"SEH404", "groupItemNo":"SEH404", "status":1, "categoryId":24356, "packType":"ColorBox", "barcode":"1234567890987", "modelLabel":"Color",
{"packWidth":200,
"itemNo":"SEH404",
"groupItemNo":"SEH404",
"status":1,
"categoryId":24356,
"packType":"ColorBox",
"barcode":"1234567890987",
"modelLabel":"Color",
"modelList":[{"key":"SEH404","value":"Black"},{"key":"SEH404W","value":"White"}],
"packQty":20,
"packInclude":"USB Adapter, USB Charger, Earphone, Leather Case",
"id":3456}
一个重要的部分是带有标记“modelList”的数组
数组模型列表的结果必须是每个值的一列 例如: packWidth、itemNo、groupItemNo、status、categoryId、packType、条形码、modelLabel、modelList1、modelList2、packQty、packInclude、id 200,SEH404,SEH404,124356,色盒,1234567890987,颜色,SEH404:黑色,SEH404W:白色,20,USB适配器,3456 某些产品可能还包含5条记录“modelList1-modelList2 modelList3-modelList4-modelList5”。没有modelList的产品将记录modelList为空。请尝试此操作。 假设$json是原始数据,所以我在开始时对其进行了解码
$json = json_decode($json);
// Will use $csv to build our CSV content
$csv = array();
// Need to define the special column
$modelList = 'modelList';
// Find necessary additional column number for modelList
$maxSubData = 0;
foreach ($json as $id => $data)
{
$maxSubData = max(array(count($data->modelList), $maxSubData ));
}
// Headers for CSV file
// Headers Start
$headers = array();
foreach ($json[0] as $key => $value)
{
if ($key == $modelList)
{
for ($i = 1; $i <= $maxSubData; $i++)
{
$headers[] = $modelList . $i;
}
}
else
{
$headers[] = $key;
}
}
$csv[] = '"' . implode('","', $headers) . '"';
// Headers End
// Now the rows
// Rows Start
foreach ($json as $data)
{
$fieldValues = array();
foreach ($data as $key => $value )
{
if ($key == $modelList)
{
$j = 0;
foreach ($value as $subValue)
{
$subData = array();
foreach ($subValue as $subCols)
{
$subData[] = $subCols;
}
$j++;
$fieldValues[] = htmlspecialchars(implode(':', $subData ));
}
for ($i = $j + 1; $i <= $maxSubData; $i++)
{
$fieldValues[] = '';
}
}
else
{
$fieldValues[] = htmlspecialchars($value);
}
}
$csv[] = '"' . implode('","', $fieldValues) . '"';
}
// Rows End
$finalCSV = implode("\n", $csv);
print $finalCSV;
$json=json\u decode($json);
//将使用$csv构建我们的csv内容
$csv=array();
//需要定义特殊列
$modelList='modelList';
//查找modelList所需的附加列号
$maxSubData=0;
foreach($json作为$id=>$data)
{
$maxSubData=max(数组(计数($data->modelList),$maxSubData));
}
//CSV文件的标题
//标题开始
$headers=array();
foreach($json[0]作为$key=>$value)
{
如果($key==$modelList)
{
对于($i=1;$i$value)
{
如果($key==$modelList)
{
$j=0;
foreach($value作为$subValue)
{
$subData=array();
foreach($subValue作为$subCols)
{
$subData[]=$subCols;
}
$j++;
$fieldValues[]=htmlspecialchars(内爆(“:”,$subData));
}
对于($i=$j+1;$i这是不可能的,因为在JSON中您有分层数据结构,但CSV只是二维的(请参见modelList属性)。使用内置函数将该JSON字符串转换为数组,然后对其进行迭代并输出所需内容。您希望如何输出modelList?对于我来说,它将是一个完整的字符串。”[{“键”:“SEH404”,“值”:“黑色”},{“键”:“SEH404W”,“值”:“白色”}]"您想对modelList数组做什么?如何在CSV中表示该数据?数组modelList的结果必须是每个值的一列示例:-名称列------packWidth、itemNo、groupItemNo、status、categoryId、packType、条形码、modelLabel、modelList1、modelList2、packQty、packInclude、id------value------200、SEH404、SEH404,124356,颜色盒,1234567890987,颜色,SEH404:黑色,SEH404W:白色,20,USB适配器,3456@user3406254:ModelList将始终包含两条记录,以便与:在modelList1和modelList2列中合并?一个产品ModelList可以工作,但如果json文件中有许多产品,第一个是无记录ModelList则无法工作。这是原始的json文件,我已经尝试过了,但是脚本工作不好,并且没有包装。发布的代码是初始问题的任何可能解决方案的最简化版本,它还扩展了初始问题,并包含了最初未提供的可能要求。它可以根据我的进一步要求进行调整在您的项目中。因此,我希望它提供了一个良好的起点,就像问题中提到的“与产品一起工作”。我希望它有帮助。您好,我感谢您提供了帮助。当然,这是一个伟大的脚本,我只需适应我的需要。谢谢阿加尼对不起,我可以问您最后一个问题吗?写价值观要在csv文件的最后一列中创建modelList,以避免数据混乱,可以吗?如果您希望我响应,请提前感谢。这是原始json文件,我已经尝试过了,但脚本工作不正常,无法包装。dropbox.com/s/37k18vq538x5gio/json.txt您可以使用迭代器并创建嵌套键来创建普通表对于csv头像,“谢谢”的否决票,但仍然-plain table是plain table。它不能完全覆盖json可以拥有的多层深层层次结构。