PHP接收J(rèn)SON格式的數(shù)據(jù)
創(chuàng)新互聯(lián)建站從2013年創(chuàng)立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目網(wǎng)站制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元商丘做網(wǎng)站,已為上家服務(wù),為商丘各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:18982081108
在API服務(wù)中,目前流行采用json形式來交互。
給前端調(diào)用的接口輸出Json數(shù)據(jù),這個(gè)比較簡(jiǎn)單,只需要組織好數(shù)據(jù),用json_encode($array) 轉(zhuǎn)化一下,前端就得到j(luò)son格式的數(shù)據(jù)。
接收前端提交的json數(shù)據(jù)稍微復(fù)雜一點(diǎn),原因是:PHP默認(rèn)識(shí)別的數(shù)據(jù)類型是application/x-標(biāo)準(zhǔn)的數(shù)據(jù)類型。因此,對(duì)型如text/xml 或者 soap 或者 application/octet-stream 和application/json格式之類的內(nèi)容無法解析,如果用$_POST數(shù)組來接收就會(huì)失敗!
此時(shí)可以使用$GLOBALS['HTTP_RAW_POST_DATA'] 或 file_get_contents('php://input') 來獲取提交的數(shù)據(jù)
查看手冊(cè),可以發(fā)現(xiàn)$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST的區(qū)別:
$_POST:通過 HTTP POST 方法傳遞的變量組成的數(shù)組,是自動(dòng)全局變量。
$GLOBALS['HTTP_RAW_POST_DATA'] :總是產(chǎn)生 $HTTP_RAW_POST_DATA 變量包含有原始的 POST 數(shù)據(jù)。此變量?jī)H在碰到未識(shí)別 MIME 類型的數(shù)據(jù)時(shí)產(chǎn)生。$HTTP_RAW_POST_DATA 對(duì)于 enctype="multipart/form-data" 表單數(shù)據(jù)不可用。也就是說基本上$GLOBALS['HTTP_RAW_POST_DATA'] 和 $_POST是一樣的。但是如果post過來的數(shù)據(jù)不是PHP能夠識(shí)別的,你可以用 $GLOBALS['HTTP_RAW_POST_DATA']來接收,比如 text/xml 或者 soap 等等。
php 輸出JSON格式,使用json_encode函數(shù)即可
例如:
?php
header('Content-type: text/json');
$fruits = array (
"fruits" = array("a" = "orange", "b" = "banana", "c" = "apple"),
"numbers" = array(1, 2, 3, 4, 5, 6),
"holes" = array("first", 5 = "second", "third")
);
echo json_encode($fruits);
?
得到結(jié)果:
{"fruits":{"a":"orange","b":"banana","c":"apple"},"numbers":[1,2,3,4,5,6],"holes":{"0":"first","5":"second","6":"third"}}
在我的博客《PHP cURL實(shí)現(xiàn)模擬登錄與采集使用方法詳解》中“十一、發(fā)送與獲取json數(shù)據(jù)”對(duì)這個(gè)問題做了詳細(xì)講解,下面是示例代碼:
?php
#json數(shù)據(jù)
$url?=?'';
$data?=?'{"a":"b"}';???//數(shù)據(jù)格式1:直接json格式類型數(shù)據(jù)
$length?=?strlen($data);
$header?=?array(
'Content-Length:?'?.?$length,???//不是必需的
'Content-Type:?text/json',
);
$ch?????????????????=?curl_init($url);??//初始化curl
curl_setopt($ch,?CURLOPT_RETURNTRANSFER,?1);
curl_setopt($ch,?CURLOPT_HTTPHEADER,?$header);
curl_setopt($ch,?CURLOPT_POST,?1);
curl_setopt($ch,?CURLOPT_POSTFIELDS,?$data);
$content?=?curl_exec($ch);??//執(zhí)行并存儲(chǔ)結(jié)果
curl_close($ch);
echo?$content;
#數(shù)據(jù)格式2:\n分割數(shù)據(jù)
$data?=?[
'name:Zjmainstay',
'website:',
];
$data?=?implode("\n",?$data);
#數(shù)據(jù)格式3:分割數(shù)據(jù)
$data?=?'name:Zjmainstaywebsite:';
文章還涉及很多php curl相關(guān)內(nèi)容,如需了解,請(qǐng)?jiān)L問查看。
PHP 支持8種基本的數(shù)據(jù)類型。
一:四種標(biāo)量類型:
1、boolean (布爾型)
2、integer (整型)
3、float (浮點(diǎn)型, 也稱作 double)
4、string (字符串)
二:兩種復(fù)合類型:
1、array (數(shù)組)
2、object (對(duì)象)
三:兩種特殊類型:
1、resource?。ㄙY源)
2、NULL?。∟ULL)
PHP,是英文超文本預(yù)處理語言Hypertext Preprocessor的縮寫。PHP 是一種 HTML 內(nèi)嵌式的語言,是一種在服務(wù)器端執(zhí)行的嵌入HTML文檔的腳本語言,語言的風(fēng)格有類似于C語言,被廣泛地運(yùn)用。