构建 JSON 数据以处理 CSV

我有一个关于将 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。


如何克服这些问题以确保使用所有键,并将值放置在键的正确列中?


PIPIONE
浏览 124回答 1
1回答

繁星coding

如果您首先检查了所有元素并建立了所有字段的列表,那么您可以确保每一行都包含所有可能的元素。然后它创建一个空模板数组,其中包含(使用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 headerfputcsv($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);
打开App,查看更多内容
随时随地看视频慕课网APP