使用PHP解析Visa Developer API响应JSON输出时出现问题该如何解决
问题修复方案
临时快速修复
如果暂时无法调整请求配置,可直接通过字符串定位截取有效JSON内容,代码如下:
// 定位有效JSON的起始偏移量 $jsonStartPos = strpos($response, '{"ReturnedResults"'); if ($jsonStartPos !== false) { // 截取得到纯JSON内容 $validJson = substr($response, $jsonStartPos); $parseResult = json_decode($validJson, true); // 校验解析结果 if (json_last_error() === JSON_ERROR_NONE) { $offerList = $parseResult['ReturnedResults'] ?? []; // 此处可遍历$offerList组装前端所需的优惠列表结构 } }
该方案仅作为临时兜底,不建议长期使用。
根因解决最优方案
返回内容夹杂冗余信息,90%以上是CURL配置错误导致,调整CURL配置可从根源避免该问题,无需额外做字符串截取,完整请求示例如下:
// 初始化CURL $curl = curl_init(); // 替换为实际的Offers Data API请求地址 curl_setopt($curl, CURLOPT_URL, "https://your-vdp-api-endpoint/path"); // 核心配置1:要求CURL直接返回响应体,而非直接输出内容+返回布尔值 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // 核心配置2:不返回HTTP响应头,避免头信息混入响应体 curl_setopt($curl, CURLOPT_HEADER, false); // 按需配置请求方式,以下为POST请求配置,GET请求可删除 curl_setopt($curl, CURLOPT_POST, true); // 替换为实际请求参数,JSON格式请求直接传序列化后的字符串即可 curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode([ "param1" => "value1", "param2" => "value2" ])); // 配置请求头,替换为VDP要求的认证信息、内容类型等 curl_setopt($curl, CURLOPT_HTTPHEADER, [ "Content-Type: application/json", "Authorization: Bearer your-access-token", // 如有其他VDP要求的头信息可在此补充 ]); // VDP接口为HTTPS协议,生产环境建议配置可信CA证书,调试阶段可临时关闭校验 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 如接口要求双向证书认证,需补充以下配置,替换为你的证书文件路径 // curl_setopt($curl, CURLOPT_SSLCERT, "/path/to/your/cert.pem"); // curl_setopt($curl, CURLOPT_SSLKEY, "/path/to/your/key.pem"); // 执行请求 $response = curl_exec($curl); curl_close($curl); // 此时可直接解析响应内容 $parseResult = json_decode($response, true); if (json_last_error() === JSON_ERROR_NONE) { $offerList = $parseResult['ReturnedResults'] ?? []; // 遍历处理优惠信息输出到前端即可 }
配置调整后响应内容会仅返回接口返回的纯JSON数据,无需额外处理即可正常解析。
内容的提问来源于stack exchange,提问作者MiPlayer123
相关产品推荐
相关产品推荐

