詳解PHP json_decode()函數(shù)的使用方法
json_decode() 可以對(duì)JSON字符串「解碼」,并轉(zhuǎn)換為PHP變量。
語(yǔ)法
mixed json_decoce( $json_str, assoc, depth, options )
參數(shù)
- $json_str :需要解碼的JSON字符串,只能處理UTF-8編碼的數(shù)據(jù)
- assoc :布爾類(lèi)型,true返回?cái)?shù)組,(默認(rèn))false返回對(duì)象
- depth :整數(shù)類(lèi)型,遞歸的深度(默認(rèn)512層),最大 2147483647 層
- options :二進(jìn)制掩碼,目前只支持 JSON_BIGINT_AS_STRING
返回值
- 通過(guò)恰當(dāng)?shù)念?lèi)型,返回解碼后的數(shù)據(jù),默認(rèn)返回對(duì)象類(lèi)型。
- JSON格式錯(cuò)誤 或 超過(guò)遞歸解析深度 或 false 或 null,就返回null。
一、返回?cái)?shù)組類(lèi)型
json_decode() 默認(rèn)返回「對(duì)象」類(lèi)型,如果想返回「數(shù)組」類(lèi)型,就將 assoc 參數(shù)設(shè)置為true。 assoc 參數(shù)可省略,默認(rèn)為false。
實(shí)例:
var_dump(json_decode('{"key1":"value1","key2":"value2"}')); var_dump(json_decode('{"key1":"value1","key2":"value2"}', true));
輸出:
object(stdClass)#1 (2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
options 參數(shù)設(shè)置為 JSON_OBJECT_AS_ARRAY 時(shí),也可以轉(zhuǎn)換成「數(shù)組」類(lèi)型。
實(shí)例:
var_dump(json_decode('{"key1":"value1","key2":"value2"}', JSON_OBJECT_AS_ARRAY));
輸出:
array(2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
二、JSON的鍵和值必須用雙引號(hào)
「解析」的JSON字符串,最外側(cè)用單引號(hào)包裹,里面的鍵值對(duì)用「雙引號(hào)」包裹,才能正常解析,否則會(huì)返回null。
實(shí)例:
var_dump(json_decode('{"key1":"value1","key2":"value2"}')); var_dump(json_decode("{'key1':'value1','key2':'value2'}"));
輸出:
object(stdClass)#1 (2) {
["key1"]=>
string(6) "value1"
["key2"]=>
string(6) "value2"
}
NULL
這時(shí),(PHP 7.3以上)可以設(shè)置參數(shù) options 為JSON_THROW_ON_ERROR,使其在解析錯(cuò)誤時(shí)拋出異常,方便我們及時(shí)處理錯(cuò)誤。
三、返回null問(wèn)題
除了剛才提到的JSON字符串格式錯(cuò)誤會(huì)返回null,還有其他的原因。
遇到返回null的問(wèn)題時(shí),可以在 json_decode() 后面,打印 json_last_error() 查看錯(cuò)誤。
實(shí)例:
var_dump(json_decode("{'key1':'value1','key2':'value2'}")); echo json_last_error();
輸出:
NULL
4
json_last_error() 返回值解析:
- 0 = JSON_ERROR_NONE //沒(méi)有錯(cuò)誤
- 1 = JSON_ERROR_DEPTH //超過(guò)最大堆棧深度
- 2 = JSON_ERROR_STATE_MISMATCH //無(wú)效或異常的json
- 3 = JSON_ERROR_CTRL_CHAR //控制字符錯(cuò)誤,可能是編碼不對(duì)
- 4 = JSON_ERROR_SYNTAX //JSON字符串語(yǔ)法錯(cuò)誤
- 5 = JSON_ERROR_UTF8 //異常的UTF-8字符,只能處理UTF8編碼的數(shù)據(jù)
四、大整數(shù)問(wèn)題
options 參數(shù)設(shè)置為 JSON_BIGINT_AS_STRING,可以將超過(guò)PHP整型「最大值」的整數(shù)解析為字符串。
五、傳入非字符串類(lèi)型
如果傳入的不是字符串類(lèi)型,就不會(huì)解碼,或者說(shuō)「無(wú)法解碼」:
- 數(shù)值型會(huì)原樣返回
- 運(yùn)算符會(huì)運(yùn)算后返回運(yùn)算結(jié)果
- 布爾型(true返回1,false返回NULL)
- null會(huì)返回NULL
實(shí)例:
var_dump(json_decode(10)); var_dump(json_decode(10.11)); var_dump(json_decode(1*2)); var_dump(json_decode(true)); var_dump(json_decode(false)); var_dump(json_decode(null));
輸出:
int(10)
float(10.11)
int(2)
int(1)
NULL
NULL
六、強(qiáng)制類(lèi)型轉(zhuǎn)換
解碼后進(jìn)行「強(qiáng)制類(lèi)型轉(zhuǎn)換」
實(shí)例:
var_dump((array)json_decode(10)); var_dump((int)json_decode(false));
輸出:
array(1) {
[0]=>
int(10)
}
int(0)
到此這篇關(guān)于詳解PHP json_decode()函數(shù)的使用方法的文章就介紹到這了,更多相關(guān)PHP json_decode()函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PHP 自定義錯(cuò)誤處理函數(shù)trigger_error()
trigger_error() 用于在用戶(hù)指定的條件下觸發(fā)一個(gè)錯(cuò)誤消息。它與內(nèi)建的錯(cuò)誤處理器一同使用,也可以與由 set_error_handler() 函數(shù)創(chuàng)建的用戶(hù)自定義函數(shù)使用2013-03-03php實(shí)現(xiàn)建立多層級(jí)目錄的方法
這篇文章主要介紹了php實(shí)現(xiàn)建立多層級(jí)目錄的方法,需要的朋友可以參考下2014-07-07php+Ajax無(wú)刷新驗(yàn)證用戶(hù)名操作實(shí)例詳解
這篇文章主要介紹了php+Ajax無(wú)刷新驗(yàn)證用戶(hù)名操作,簡(jiǎn)單介紹了ajax的原理并結(jié)合實(shí)例形式分析了php結(jié)合ajax無(wú)刷新驗(yàn)證用戶(hù)名相關(guān)操作技巧,需要的朋友可以參考下2019-03-03PHP類(lèi)與對(duì)象中的private訪問(wèn)控制的疑問(wèn)
在手冊(cè)中遇到了一個(gè)沒(méi)想明白的問(wèn)題,記錄一下,方便需要的朋友2012-11-11php 中self,this的區(qū)別和操作方法實(shí)例分析
這篇文章主要介紹了php 中self,this的區(qū)別和操作方法,結(jié)合實(shí)例形式分析了PHP面向?qū)ο蟪绦蛟O(shè)計(jì)中self,this的功能、區(qū)別、使用方法與操作注意事項(xiàng),需要的朋友可以參考下2019-11-11PHP一些常用的正則表達(dá)式字符的一些轉(zhuǎn)換
一些前臺(tái)的正則運(yùn)行,你可以修改下成為php的2008-07-07php中g(shù)et_meta_tags()、CURL與user-agent用法分析
這篇文章主要介紹了php中g(shù)et_meta_tags()、CURL與user-agent用法,以實(shí)例形式較為詳細(xì)的分析了get_meta_tags()、CURL與user-agent使用時(shí)的注意事項(xiàng)與用法,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2014-12-12Function eregi is deprecated (解決方法)
本篇文章是對(duì)Function eregi() is deprecated錯(cuò)誤的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06