You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取按行排列的JSON数组响应?API返回格式异常排查

问题:API调用返回JSON格式混乱,与测试界面不一致

我正在通过API调用JSON数组,当前遇到数据返回格式的问题。API自带的测试界面返回的是0到9共10行规整排列的JSON数组,但我使用自行编写的代码调用时,返回的格式十分混乱。请问出现该问题的原因是什么?该如何修复?

我的调用代码如下:

$curl = curl_init(); 
//adding fields to the curl object to enter the site 
curl_setopt($curl, CURLOPT_URL, $my_url); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); 
//executing the curl call and getting data back 
$json = curl_exec($curl); 
curl_close($curl); // close the connection 
echo $json; 

解答

别担心,这个问题其实很常见,主要有两个可能的原因,对应的修复方法也很简单:

原因1:你看到的「混乱」只是原始JSON的无格式显示

API自带的测试界面会自动帮你把返回的JSON做格式化处理(添加换行、缩进),让内容看起来规整易读;但你的代码直接echo $json输出的是API返回的原始JSON字符串——它本身是紧凑的、没有多余空格和换行的,所以看起来就会一团乱,但数据本身是没问题的。

修复方法:手动格式化JSON输出

你可以用PHP的json_decode先把字符串转成数组/对象,再用json_encode配合JSON_PRETTY_PRINT参数重新编码成带格式的JSON:

$curl = curl_init(); 
curl_setopt($curl, CURLOPT_URL, $my_url); 
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_ENCODING, 'gzip,deflate'); 
$json = curl_exec($curl); 
curl_close($curl); 

// 先解码,再格式化输出
$data = json_decode($json, true);
if ($data !== null) {
    // 设置响应头为JSON类型,让浏览器也能识别并格式化
    header('Content-Type: application/json');
    echo json_encode($data, JSON_PRETTY_PRINT);
} else {
    // 处理JSON解码失败的情况
    echo "JSON解析错误:" . json_last_error_msg();
}

原因2:可能存在压缩响应处理异常

虽然你设置了CURLOPT_ENCODING让curl自动处理gzip/deflate压缩,但极少数情况下,可能因为服务器端压缩配置或者curl环境问题,导致返回的内容没有被正确解压缩,出现乱码或异常格式。

排查&修复方法:

  1. 先输出var_dump($json)看看返回的内容,如果是乱码或者非JSON格式的字符串,尝试去掉CURLOPT_ENCODING选项,让curl自动协商编码:
    curl_setopt($curl, CURLOPT_ENCODING, ''); // 清空编码设置
    
  2. 如果还是不行,可以尝试手动解压缩:
    if (function_exists('gzdecode')) {
        $json = gzdecode($json);
    }
    

内容的提问来源于stack exchange,提问作者Victor Velasco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:23:21