我想将JSON转换为CSV文件。 这是我的PHP代码:
<?php
$response = '[{
"field1": "vala1",
"field2": "vala2",
"field3": "vala3",
"field4": [{
"field4a": "vala4-1",
"field4b": "vala4-2",
"field4c": "vala4-3"
}]
}, {
"field1": "valb1",
"field2": "valb2",
"field3": "valb3",
"field4": [{
"field4a": "valb4-1",
"field4b": "valb4-2",
"field4c": "valb4-3"
}]
}]';
$list = json_decode($response, true);
$fp = fopen('test_json.csv', 'w');
foreach ($list as $fields) {
fputcsv($fp, $fields, ';');
}
fclose($fp);
?>
但是,我得到了这个通知:
数组到字符串转换
在我的CSV文件中,我在第四列中获得数组值。
此处的预期输出:
vala1;vala2;vala3;vala4-1,vala4-2,vala4-3
valb1;valb2;valb3;valb4-1,valb4-2,valb4-3
如果我使用此代码,我可以获得预期值:
echo $fields['field1'] . ';' . $fields['field2'] . ';' . $fields['field3'] . ';' . $fields['field4'][0]['field4a'] . ',' . $fields['field4'][0]['field4b'] . ',' . $fields['field4'][0]['field4c'] . '<br>';
但它不灵活.. 那么,即使我在JSON文件中添加了很多字段,如何将子数组json转换为CSV文件呢?
提前致谢,
答案 0 :(得分:1)
编辑:我是一个白痴,并没有思考。正确的答案应如下:
foreach ($list as $fields) {
$flatFields = [];
foreach ($fields as $value) {
$newValue = $value;
if (isset($value[0]) && is_array($value[0])) {
$newValue = implode(',', $value[0]);
}
$flatFields[] = $newValue;
}
fputcsv($fp, $flatFields, ';');
}
Haven尚未测试但应该没问题。但是,如果你的子数组也包含子数组,那么你需要一个递归函数来处理它 - 让我知道并且我会更新这个答案。
答案 1 :(得分:0)
试试这个:
...
$list = json_decode($response, true);
$fp = fopen('test_json.csv', 'w');
foreach ($list as $fields) {
$fields['field4'] = implode(',',$fields['field4']);
fputcsv($fp, $fields, ';');
}
fclose($fp);