【发布时间】:2020-09-19 02:16:40
【问题描述】:
由于 laravel 返回的反斜杠,我无法通过 javascript 解析来自我的 API 的 json 响应。我注意到,如果它是一个被转换为 json 的模型,laravel 没有反斜杠将它发送回来没有问题。但是,我正在使用 guzzle 访问 API,我必须将该 API 的响应添加到我自己的自定义响应中以及一些其他数据。
在通过response()->json() 发回之前,我已经记录了我的回复数据,内容如下:
array (
'data' =>
array (
'checkout' => '{"timestamp":1600480972698,"status":200,"message":"Request processed successfully","path":"/checkout","data":{"transaction_id":"xxxxx","status_description":"Transaction ready for payment","payment_url":"http://abcdefg.com/abcdefg'
'transaction' => '{"data":{"transaction":{"billable_id":5,"amount_due":2,"transaction_fee":0.06000000000000005,"amount_paid":0,"reference_id":null,"reference_no":"PTX-0920UI22QJU2","payment_type_id":9,"transaction_status_id":1,"updated_at":"2020-09-19T02:03:09.0000$
),
'status_code' => 200,
)
但response()->json($responseData) 实际返回的是:
{
"data":{
"checkout":"{\"timestamp\":1600480972698,\"status\":200,\"message\":\"Request processed successfully\",\"path\":\"\/checkout\",\"data\":{\"transaction_id\":\"200919020252BEZ5305\",\"status_description\":\"Transaction ready for payment\",\"payment_url\":\"http:\/\/abcdefg.com\/abcdefg\/1.2.1\/index.html#\/confirm?bizNo=20200919121212800110170567600273184×tamp=1600480989712&sign=ChbtFZnRH5Mkqlou2BrZZ6TSvhrChmaTUPJnvWok14bVgr1lqMp46mOHoMm%2Fcy%2FhbfUzMoKJ0aG4%2BEjN%2BpFJaW5NchzV6WaZmur1YjFmPzaHVom74kGZcsWeJymgU%2BGmfnyrRaYP971%2BBl4Jqv6NX4gpGsIhzRSsiZIK5cxmk5DHIvn4MTA2834gS3%2FLTfWiQYHmmhhux3FL7eC72IgjW%2BC87pa2GC6XP0BCbgRpyMNUdD%2F5hEoHVKiWdNi8K9WyFZyxOyj%2B73gY%2F4XUJf6wyCLUxg8l6L4xnE0meBOguB8Q2qhS33NUvqXQowsJTn%2BGGEBeu9b4JgKf2cIaPlxE7A%3D%3D&merchantName=APNorderAmount=2.00\",\"status_code\":\"OK.01.00\"}}",
"transaction":"{\"data\":{\"transaction\":{\"billable_id\":5,\"amount_due\":2,\"transaction_fee\":0.06000000000000005,\"amount_paid\":0,\"reference_id\":null,\"reference_no\":\"PTX-0920UI22QJU2\",\"payment_type_id\":9,\"transaction_status_id\":1,\"updated_at\":\"2020-09-19T02:03:09.000000Z\",\"created_at\":\"2020-09-19T02:03:09.000000Z\",\"id\":77}},\"message\":\"Transaction successfully created.\",\"status_code\":200}"
},
"status_code":200
}
注意:上面的 json 中可能有一些不需要的字符,因为我只能通过我的弹性 beanstalk 服务器上的 nano/terminal 从 laravel.log 复制这些字符,因为限制我只能从我的服务器访问 API,因为 IP必须列入白名单。
这些有什么方法可以在我的第二个代码 sn-p 上返回数据而没有反斜杠?
我用确切的代码返回它return response()->json($response)->setStatusCode($response['status_code']);
【问题讨论】:
-
在发送响应之前将
checkout和transaction的值转换为数组可以吗?我认为这会解决你的问题。 -
这些实际上是在我的控制器上使用 json_encode($data, JSON_UNESCAPED_SLASHES) 处理的。我可能不得不将它们转换为数组,因为它们来自 API,并且可能有不同的结果。