如何将多个cURL响应合并为单个JSON?
合并多个JSON响应的PHP实现修改方案
当前你的PHP代码会依次请求多个接口并输出独立的JSON响应,现在需要将这些响应合并为两种指定格式之一,以下是对应的修改方案:
原代码问题分析
原代码仅将每个接口的原始JSON字符串存入数组后直接输出,导致多个独立JSON对象并存,无法满足合并需求。需要先将JSON解析为PHP数组,合并目标数据后再重新编码为JSON输出。
方案一:合并为包含统一成功状态的JSON结构
此方案将所有接口返回的obj数组合并到一个包含success、msg和合并后obj的JSON对象中:
<?php $curlData = array( array( 'url' => 'https://example.com/list', 'cookie' => 'session=example' ), array( 'url' => 'https://anotherdomain.com/list', 'cookie' => 'session=another' ), // Add more domains and cookies as needed ); // 初始化合并结果 $mergedResult = array( 'success' => true, 'msg' => '', 'obj' => array() ); foreach ($curlData as $data) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $data['url'], CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => array( 'Cookie: ' . $data['cookie'] ), )); $response = curl_exec($curl); curl_close($curl); // 解析JSON为PHP数组 $responseData = json_decode($response, true); if ($responseData && isset($responseData['obj']) && is_array($responseData['obj'])) { // 合并obj数组 $mergedResult['obj'] = array_merge($mergedResult['obj'], $responseData['obj']); } } // 输出合并后的JSON echo json_encode($mergedResult, JSON_PRETTY_PRINT); ?>
输出结果示例:
{ "success": true, "msg": "", "obj": [ { "id": 1, "remark": "D" }, { "id": 159, "remark": "mssdss" }, { "id": 14, "remark": "tttt" }, { "id": 56, "remark": "ok" } ] }
方案二:直接合并为元素数组
此方案将所有接口返回的obj数组元素直接合并为一个一维数组:
<?php $curlData = array( array( 'url' => 'https://example.com/list', 'cookie' => 'session=example' ), array( 'url' => 'https://anotherdomain.com/list', 'cookie' => 'session=another' ), // Add more domains and cookies as needed ); // 初始化合并数组 $mergedItems = array(); foreach ($curlData as $data) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $data['url'], CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => '', CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 0, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => array( 'Cookie: ' . $data['cookie'] ), )); $response = curl_exec($curl); curl_close($curl); // 解析JSON为PHP数组 $responseData = json_decode($response, true); if ($responseData && isset($responseData['obj']) && is_array($responseData['obj'])) { // 合并元素 $mergedItems = array_merge($mergedItems, $responseData['obj']); } } // 输出合并后的JSON数组 echo json_encode($mergedItems, JSON_PRETTY_PRINT); ?>
输出结果示例:
[ { "id": 1, "remark": "D" }, { "id": 159, "remark": "mssdss" }, { "id": 14, "remark": "tttt" }, { "id": 56, "remark": "ok" } ]
内容的提问来源于stack exchange,提问作者world
相关产品推荐
相关产品推荐

