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

Codeigniter 4 ResourceController 实现JSON输出最小化(压缩)的方法

Codeigniter 响应JSON压缩处理方案

方法1:修改全局配置(通用生效,推荐)

Codeigniter RESTful控制器的JSON输出格式由配置文件统一管控,直接编辑app/Config/Format.php,调整JSON格式化参数即可:

// 找到$formatterOptions配置项,移除JSON_PRETTY_PRINT参数
public $formatterOptions = [
    'application/json' => JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES,
    // 去掉JSON_PRETTY_PRINT后,所有JSON输出默认就是无空格换行的压缩格式
];

修改后原有$this->respond($data, 200)的代码无需任何改动,输出的JSON自动变为压缩状态。

方法2:单接口手动处理

如果仅需要部分接口返回压缩JSON,不想修改全局配置,可手动编码JSON后输出:

$data = ['id' => 8, 'name' => 'John Doe', 'age' => 27];
// 手动编码时不传入美化参数,直接生成压缩JSON
$compressedJson = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

return $this->response
    ->setContentType('application/json')
    ->setBody($compressedJson)
    ->setStatusCode(200);

方法3:自定义响应方法(灵活切换格式)

如果需要根据场景切换美化/压缩格式,可在基础控制器中重写respond方法,新增压缩开关:

// 在BaseController中新增自定义响应方法
protected function respond($data, int $statusCode = 200, bool $compress = true)
{
    $jsonOptions = JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES;
    if (!$compress) {
        $jsonOptions |= JSON_PRETTY_PRINT;
    }

    return $this->response
        ->setContentType('application/json')
        ->setBody(json_encode($data, $jsonOptions))
        ->setStatusCode($statusCode);
}

使用时按需传参即可:

// 输出压缩JSON
return $this->respond($data, 200);
// 输出美化格式JSON
return $this->respond($data, 200, false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 08:15:04