我以前還傻傻的自己用格式,沒想到用json_encode()就可以搞定了
以下文章轉至http://blog.longwin.com.tw/2011/08/php-json-encode-format-2011/
PHP 回傳 JSON 很方便, 只要將資料經過 json_encode() 就解決了.
不過因為 PHP 自動轉換型別, 造成很多資料都習慣存成字串, 希望在輸出 JSON 的時候, 數字部份可以輸出成數字, 該怎麼做呢?
另一個問題, PHP 轉換成 JSON, 部份陣列會被轉成物件(因為 JavaScript 陣列的 Key 必須是數字, 所以會轉成物件), 要全部強制轉成物件, 該怎麼做呢?
PHP 讓 json_encode() 指定回傳格式
上述的問題, json_encode() 的參數都可以解決.
json_encode() 有這些參數可以用:
- JSON_HEX_QUOT
 - JSON_HEX_TAG
 - JSON_HEX_AMP
 - JSON_HEX_APOS
 - JSON_NUMERIC_CHECK
 - JSON_PRETTY_PRINT
 - JSON_UNESCAPED_SLASHES
 - JSON_FORCE_OBJECT
 
PHP 判斷型別輸出 JSON 數字型態
主要靠 json_encode 的 JSON_NUMERIC_CHECK 參數, ex:
- 
<?php
 - 
echo json_encode(array('id' => '123', 'data' => 'abc'), JSON_NUMERIC_CHECK);
 - 
echo json_encode(array('id' => '123', 'data' => 'abc'));
 - 
echo json_encode(array('id' => 123, 'data' => 'abc'));
 - 
?>
 
輸出結果
- {"id":123,"data":"abc"}
 - {"id":"123","data":"abc"}
 - {"id":123,"data":"abc"}
 
PHP 強迫輸出 JSON 物件格式
主要靠 json_encode 的 JSON_FORCE_OBJECT 參數, ex:
- 
<?php
 - 
echo json_encode(array(1, 2, 3));
 - 
echo json_encode(array(1, 2, 3), JSON_FORCE_OBJECT);
 - 
echo json_encode(array(array(1, 2, 3)));
 - 
echo json_encode(array(array(1, 2, 3)), JSON_FORCE_OBJECT);
 - 
echo json_encode(array(1 => 123, 2 => 'abc'));
 - 
?>
 
輸出結果
- [1,2,3]
 - {"0":1,"1":2,"2":3}
 - [[1,2,3]]
 - {"0":{"0":1,"1":2,"2":3}}
 - {"1":123,"2":"abc"} // 本來就會輸出 Object
 

