PHP中将多组JSON数组转换为单个JSON对象数组的方法咨询
解决方法:将多组JSON数组转换为JSON对象数组
好问题!PHP确实没有专门的内置函数直接完成这种从「表头数组+数据行数组」到「对象数组」的转换,但我们可以用几个基础函数组合起来轻松实现,具体步骤如下:
1. 先处理原始JSON字符串(关键前提)
你提供的原始内容是多个独立JSON数组直接拼接的格式(比如["a","b"]["c","d"]),这属于非法JSON,无法直接用json_decode解析。我们需要先把它转换成合法的JSON数组格式:
// 假设你的原始JSON内容是这样的 $rawJson = '["FIRST_COLUMN", "SECOND_COLUMN", "THIRD_COLUMN"]["John", "Snow", "Game of Thrones"]["Ned", "Snow", "Game of Thrones"]'; // 将多个独立数组转为一个合法的JSON数组(外层包裹[],数组间用逗号分隔) $validJson = '[' . str_replace('][', '],[', $rawJson) . ']';
2. 解析为PHP数组并提取表头
用json_decode把合法的JSON字符串转成PHP索引数组,然后取出第一个数组作为表头:
// 解析为PHP数组(第二个参数true表示转成关联/索引数组,而非对象) $data = json_decode($validJson, true); // 检查解析是否成功 if ($data === null) { die('JSON解析失败:' . json_last_error_msg()); } // 提取表头(第一个元素),同时从原数组中移除它 $headers = array_shift($data);
3. 转换为关联数组(对应JSON对象)
遍历剩下的每一行数据,用array_combine把表头和行数据配对成关联数组,最终组成对象数组:
$result = []; foreach ($data as $row) { // 可选:检查行数据和表头的元素数量是否匹配,避免报错 if (count($row) !== count($headers)) { error_log("数据行与表头数量不匹配,已跳过该行:" . json_encode($row)); continue; } // 表头作为键,行数据作为值,生成关联数组 $result[] = array_combine($headers, $row); }
4. 输出最终的JSON对象数组
最后用json_encode把PHP关联数组转成JSON对象数组:
// JSON_PRETTY_PRINT用于格式化输出,方便阅读,可省略 echo json_encode($result, JSON_PRETTY_PRINT);
最终输出示例
执行上述代码后,你会得到期望的格式:
[ { "FIRST_COLUMN": "John", "SECOND_COLUMN": "Snow", "THIRD_COLUMN": "Game of Thrones" }, { "FIRST_COLUMN": "Ned", "SECOND_COLUMN": "Snow", "THIRD_COLUMN": "Game of Thrones" } ]
内容的提问来源于stack exchange,提问作者overflower
相关产品推荐
相关产品推荐

