App在與Server端溝通的時候,通常是透過API來傳遞參數,而參數所使用的格式中,JSON是很常見的一種。在PHP中,通常會把要傳遞的參數存成陣列,然後用函式來作陣列-JSON的轉換,如下例子:
$param=array(
“url" => “http://blog.waws.idv.tw",
“doc" => “52″
);
echo json_encode($param);
結果會產生以下JSON字串:
{“url" : “http://blog.waws.idv.tw", “doc_id" : “52″ }
在一般情形下,這樣運作是正常的;像這樣的API有可能會用在當App要查詢是否有新的文章時,Server端回覆新文章的id代碼,以便App取得文章內容,但當查詢的結果,是沒有新文章的時候,常會以JSON回覆空陣列給App端,這時就容易出問題了。
如果沒有經過特別的處理,PHP的程式碼會像這樣:
$param=array();
echo json_encode($param);
結果呢?產生的JSON字串成了這樣:
[ ]
注意到了嗎?最外層的大括號變成中括號了。
因為PHP是個格式寬鬆的程式語言,在PHP中,變數的資料型態是可以隨意轉換的,所以當array的值是有index的(如上例中的url、doc_id),轉成JSON格式時,就會是大括號;若array無index時(index為數字型態),則轉成JSON格式時,就會是中括號。
這個問題在與App串接時,最容易發生問題;因為App所用的語言資料型態格式較為嚴謹,因此在定義API文件時,通常參數格式也會有明確的定義;當應該回傳的格式是Object,Server卻回傳了array的時候,App常常就閃退了…
類似問題的處理方法:
- 當API沒有回傳值時,定義一個特定的錯誤碼,不要回傳空array。
- 當要回傳空array時,用 $param = new stdClass(),或直接回傳 { } 字串。