问题描述
我有一个API JSON服务,需要创建一个脚本将数据导出到CSV文件.是否有人有PHP脚本将JSON迁移为CSV格式?
I've got a API JSON service and need to create a script to export data to CSV files.Does anyone have a php script to migrate JSON to CSV format?
示例Json文件
{"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"的数组
An important part is the array with the tag "modelList"
数组modelList的结果必须是每个值的一列
The result of the array modelList, must be a column for each value
示例:
packWidth,itemNo,groupItemNo,状态,categoryId,packType,条形码,modelLabel,modelList1,modelList2,packQty,packInclude,id
packWidth, itemNo, groupItemNo, status, categoryId, packType, barcode, modelLabel, modelList1, modelList2, packQty, packInclude, id
200,SEH404,SEH404、1、24356,ColorBox,1234567890987,颜色, SEH404:黑色,SEH404W:白色,20,USB适配器...,3456
200, SEH404, SEH404, 1, 24356, ColorBox, 1234567890987, Color, SEH404:Black, SEH404W:White, 20, USB Adapter... , 3456
某些产品可能还包含5条记录"modelList1-modelList2 modelList3-modelList4-modelList5.没有modelList的产品会将modelList记录为空.
Some products may also contain 5 records "modelList1-modelList2 modelList3-modelList4-modelList5. Products without modelList will record modelList empty.
推荐答案
请尝试此操作.假设$ json是原始数据,所以我在开始时对其进行了解码.
Please try this.Assuming $json is the raw data, so I decoded it at the beginning.
$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;
这篇关于PHP脚本将Json转换为CSV的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!