如何避免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
相关产品推荐
相关产品推荐

