簡體   English   中英

如何防止laravel json響應添加反斜杠

[英]How to prevent laravel json response from adding backslashes

由於 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&timestamp=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 中可能有一些不需要的字符,因為我只能通過彈性 beantalk 服務器上的 nano/終端從 laravel.log 復制這些字符,因為限制我只能從我的服務器訪問 API,因為 IP 必須列入白名單。

這些有什么方法可以在沒有反斜杠的情況下返回我的第二個代碼片段上的數據嗎? 我用確切的代碼返回了它return response()->json($response)->setStatusCode($response['status_code']);

嘗試使用

return response()->json($response,$response['status_code'],[],JSON_UNESCAPED_SLASHES);

json() 方法(來自接口 ResponseFactory)將第四個參數作為 json 選項,

JSON_UNESCAPED_SLASHES表示編碼操作不會轉義斜杠

在您的模型中嘗試添加此屬性。 這只是示例代碼。

public function setCheckoutAttribute($value)
    {
        $this->attributes['checkout'] = json_encode($value);
    }
  
    public function getCheckoutAttribute($value)
    {
        return $this->attributes['checkout'] = json_decode($value);
    }

public function setTransactionAttribute($value)
        {
            $this->attributes['transaction'] = json_encode($value);
        }
     
        public function getTransactionAttribute($value)
        {
            return $this->attributes['transaction'] = json_decode($value);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM