php使用json_encode對變量json編碼
在 ajax 橫行的今天,json 順理成章地成為了前后端交互一個極其重要的工具。對于 PHP 來說,通常使用 json_encode 方法將一個 PHP 組數(shù),轉(zhuǎn)換成前端可以解析的 json 字符串,這也是 PHP 手冊上描述的內(nèi)容,但事實是這樣的嗎?看看下面這段代碼:
$a = array( 'Jack' , 'Sam' , 'Tom' );
echo json_encode( $a );
當(dāng) JavaScript 請求到上面的代碼,PHP 將解析數(shù)組 $a 為 json 字符串并返回到前端,但事實上在前端拿到的返回結(jié)果卻是一個數(shù)組。
[ "Jack" , "Sam" , "Tom" ]
這個結(jié)果對于前端來說也許并不是所期望的,對于 JavaScript 來說,數(shù)組和 json 的關(guān)系非常密切,甚至可以簡單地把 json 理解為關(guān)聯(lián)數(shù)組,但這并不意味著二者可以劃等號,比如 json 沒有 length 屬性,也不能進(jìn)行數(shù)字索引,json 是鍵值對,而 JavaScript 的數(shù)組嚴(yán)格說來是沒有"鍵"的,這和 PHP 的差異比較大。那么為什么 json_encode 的返回結(jié)果是數(shù)組呢?
本文開頭的 PHP 代碼中的數(shù)組是嚴(yán)格意義上的數(shù)字索引數(shù)組,json_encode 方法在處理這樣的數(shù)組的時候會返回數(shù)組字符串,它需要同時滿足兩個條件:1. 數(shù)字索引數(shù)組,2. 索引值從 0 開始。這意味著下面的代碼也會返回同樣的結(jié)果:
$b = array(
'0' => 'Jack',
'1' => 'Sam',
'2' => 'Tom'
);
echo json_encode( $b );
這兩個條件的任意一個沒有獲得滿足,那么 json_encode 方法才真正的返回 json 字符串:
$c = array(
'person-1' => 'Jack',
'person-2' => 'Sam',
'person-3' => 'Tom'
);
echo json_encode( $c );
這時前端得到的結(jié)果如下:
{
'person-1' : 'Jack',
'person-2' : 'Sam',
'person-3' : 'Tom'
};
- 淺談php和js中json的編碼和解碼
- php中json_encode中文編碼問題分析
- PHP學(xué)習(xí)散記_編碼(json_encode 中文不顯示)
- PHP中遇到BOM、<feff>編碼導(dǎo)致json_decode函數(shù)無法解析問題
- php json中文編碼為null的解決辦法
- java解析php函數(shù)json_encode unicode 編碼問題
- php5.2 Json不能正確處理中文、GB編碼的解決方法
- php實現(xiàn)json編碼的方法
- PHP自定義遞歸函數(shù)實現(xiàn)數(shù)組轉(zhuǎn)JSON功能【支持GBK編碼】
- PHP 實現(xiàn) JSON 數(shù)據(jù)的編碼和解碼操作詳解
相關(guān)文章
laravel實現(xiàn)查詢最后執(zhí)行的一條sql語句的方法
今天小編就為大家分享一篇laravel實現(xiàn)查詢最后執(zhí)行的一條sql語句的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-10-10LaravelS通過Swoole加速Laravel/Lumen詳解
這篇文章主要給大家介紹了關(guān)于LaravelS通過Swoole加速Laravel/Lumen的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03