PHP的空陣列轉成JSON…App就這樣閃退啦~

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常常就閃退了…

類似問題的處理方法:

  1. 當API沒有回傳值時,定義一個特定的錯誤碼,不要回傳空array。
  2. 當要回傳空array時,用 $param = new stdClass(),或直接回傳 { } 字串。

 

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *