-
1 # 牙醬
-
2 # 程式設計師小助手
引言
前幾篇文章我們講了表單資料的接收,驗證等功能。也說到了傳送的陣列如何處理, 今天我們說一下如果傳送的資料是JSON格式,其處理流程。
學習時間
如果知道傳入的資料是JSON格式,作為新手可能會直接從輸入獲取,這些組織程式碼:
$json = file_get_contents("php://input");
$data = json_decode($json,true);
解析為關聯陣列,輸出內容大概如下:
[ { "name": "John", "location": "Boston" }, { "name": "Dave", "location": "Lancaster" } ]
前端請求資料時,可以採用純手動組裝JSON字串,然後整體提交的方式:
$.ajax({
type: "POST",
url: "/people",
data: "[{ "name": "John", "location": "Boston" }, { "name": "Dave", "location": "Lancaster" }]",
contentType: "json",
success:function(data) { // code }
});
這裡是使用jquery的ajax方法發起請求。data 沒有使用object物件傳輸資料, 而是一個整體的字串。所以在接收的時候使用了原生的PHP方法。
這個做法很原始,也非常不靈活。其實接收請求引數的時候,我們可以使用laravel提供的 request 物件進行操作, 比如這樣接收:
$data = json_decode($request->getContent(), true);
其中 getContent 方法返回的就是原始的提交資料的字串內容。
或者我們對於post請求的資料,使用 Request 的 json 方法,將其進行json化,這將返回一個 ParameterBag 物件。 再將其格式化為陣列即可:
$data = $request->json()->all();
寫在最後
本文介紹了laravel格式化網路請求的json格式資料的方式。 知識點很小,但是很實用,希望大家能夠熟練掌握。
Happy coding :-)
回覆列表
$input = file_get_contents("php://input");
$input = json_decode($input,true);
var_dump($input);
2、獲取檔案中的json$jsonStr = file_get_contents("src/xx.json");
$jsonObj = json_decode($jsonStr, true);
3、獲取介面返回的json(以post請求為例)function run_curl_json($url, $data, $timeout) {
$data = json_encode($data);
$ch = curl_init($url); //請求的URL地址
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json", "Content-Length: " . strlen($data)));
$ret = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$jsonObj = json_decode($ret, true);
return ["data" => $jsonObj, "code" => $httpCode];
}
以上三種方式中獲取到的都是json字串,然後透過json_decode將json字串轉為陣列。