在 ajax 橫行的今天,json 瓜熟蒂落地成爲了先後端交互一個極其重要的工具。對於 PHP 來講,一般使用 json_encode 方法將一個 PHP 組數,轉換成前端能夠解析的 json 字符串,這也是 PHP 手冊上描述的內容,但事實是這樣的嗎?看看下面這段代碼:前端
$a = array( 'Jack' , 'Sam' , 'Tom' ); echo json_encode( $a );
當 JavaScript 請求到上面的代碼,PHP 將解析數組 $a 爲 json 字符串並返回到前端,但事實上在前端拿到的返回結果倒是一個數組。ajax
[ "Jack" , "Sam" , "Tom" ]
這個結果對於前端來講也許並非所指望的,對於 JavaScript 來講,數組和 json 的關係很是密切,甚至能夠簡單地把 json 理解爲關聯數組,但這並不意味着兩者能夠劃等號,好比 json 沒有 length 屬性,也不能進行數字索引,json 是鍵值對,而 JavaScript 的數組嚴格說來是沒有"鍵"的,這和 PHP 的差別比較大。那麼爲何 json_encode 的返回結果是數組呢?json
本文開頭的 PHP 代碼中的數組是嚴格意義上的數字索引數組,json_encode 方法在處理這樣的數組的時候會返回數組字符串,它須要同時知足兩個條件:1. 數字索引數組,2. 索引值從 0 開始。這意味着下面的代碼也會返回一樣的結果:後端
$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 );
這時前端獲得的結果以下:工具
{ 'person-1' : 'Jack', 'person-2' : 'Sam', 'person-3' : 'Tom' };
這篇文章主要是說明 json_encode 使用時一個須要注意的細節,不管返回的是數組仍是 json,都不表明這必定就是個錯誤的返回結果,當前端須要的數組時,數組就是正確的結果,反之亦然。code