为了账号安全,请及时绑定邮箱和手机立即绑定

构建 JSON 数据以处理 CSV

构建 JSON 数据以处理 CSV

PHP
PIPIONE 2021-11-19 16:29:07
我有一个关于将 JSON 数据保存为 CSV 格式的问题。我的 JSON 采用以下结构。{  "element_1": [    {      "field1": "Something",      "field2": 123,      "field3": "Something",      "field4": "Something"    },  ],  "element_2": [    {      "field1": "Something",      "field2": 345,      "field3": "Something"    },    {      "field1": "Something",      "field2": 365,      "field3": "Something"    },    {      "field1": "Something",      "field2": 334,      "field3": "Something",      "field4": "Something",      "field5": "Something"    },    ...]现在我有兴趣element_2以 CSV 格式保存数据。因此,我有以下内容//convert JSON data to array$array = json_decode($data, true);fputcsv($handle, array_keys($array['element_2'][0]), ',');foreach ($array['element_2'] as $key => $row) {    fputcsv($handle, $row);}现在这种方法的问题是,它只能从元素0,这意味着它射门密钥获取密钥field4和field5在元件2上。另一个问题是它的值与键不匹配。因此,如果元素 1 没有field2,它会将 的值field3放在 for 列中field2。如何克服这些问题以确保使用所有键,并将值放置在键的正确列中?
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

如果您首先检查了所有元素并建立了所有字段的列表,那么您可以确保每一行都包含所有可能的元素。


然后它创建一个空模板数组,其中包含(使用array_fill_keys())中的所有键,并且对于每一行将填充存在的项目...


$array = json_decode($data, true);

// Scan all rows adding keys to list

$keys = [];

foreach ( $array['element_2'] as $row ) {

    $keys = array_merge($keys, array_keys($row));

}

// Reduce to unique keys

$keys = array_unique($keys);


$handle = fopen("a.csv", "w");

// Write out keys as header

fputcsv($handle, $keys, ',');

// Create empty array with the keys

$template = array_fill_keys($keys, null);


foreach ($array['element_2'] as $key => $row) {

    // Uses array_merge() to copy the values from the row to the template

    fputcsv($handle, array_merge($template, $row));

}

fclose($handle);


查看完整回答
反对 回复 2021-11-19
  • 1 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信