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

如何避免Laravel JSON响应自动添加反斜杠?

问题根源

你看到的反斜杠是因为checkout和transaction字段存储的是原始JSON字符串,而不是PHP数组/对象。当Laravel的response()->json()处理这些字符串时,会把它们当作普通文本进行JSON转义,所以就出现了那些烦人的反斜杠。

解决方案

解决思路很简单:先把外部API返回的JSON字符串解析成PHP数组,再合并到你的响应数据里。

步骤1:解析外部API的JSON响应

当你用Guzzle请求外部API后,不要直接把响应体的字符串存起来,而是用json_decode()把它转成关联数组(第二个参数传true):

// 假设你用Guzzle请求外部checkout API的响应是$checkoutRes
$checkoutData = json_decode($checkoutRes->getBody(), true);

// 同理处理transaction API的响应
$transactionData = json_decode($transactionRes->getBody(), true);

步骤2:构建响应数组

把解析后的数组直接放进你的响应数据里,而不是原始的JSON字符串:

$responseData = [
    'data' => [
        'checkout' => $checkoutData,
        'transaction' => $transactionData,
    ],
    'status_code' => 200,
];

步骤3:返回响应

现在再用response()->json()返回,Laravel会正确处理嵌套的数组,不会产生多余的反斜杠:

return response()->json($responseData)->setStatusCode($responseData['status_code']);

如果你已经有了带JSON字符串的数组

如果你已经构建了像日志里那样的数组(里面是JSON字符串),可以事后对这些字符串进行解析:

// 解析checkout字段的JSON字符串为数组
$responseData['data']['checkout'] = json_decode($responseData['data']['checkout'], true);
// 解析transaction字段的JSON字符串为数组
$responseData['data']['transaction'] = json_decode($responseData['data']['transaction'], true);

// 再返回响应
return response()->json($responseData)->setStatusCode($responseData['status_code']);
效果验证

这样处理后,返回的JSON里checkout和transaction会是嵌套的JSON对象,而不是被转义的字符串,反斜杠就会消失啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:33:15