繁体   English   中英

如何将子数组json转换为CSV文件?

[英]How to convert subarray json to CSV file?

我想将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文件也可以工作?

提前致谢,

编辑 :我是一个白痴,没有思考。 正确答案应为:

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, ';');
}

尚未测试,但应该可以。 但是,如果您的子数组包含子数组,则需要递归函数来处理它-让我知道,我将更新此答案。

尝试这个:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM