注意!!最近我在使用大量資料時,發現json_format()無法運作了。後來查到主因來至於json_format()的第15行 $json = json_encode($json_obj);,原作者似乎進行了一個多餘的動作,又將json再編碼一次,這行程式使得在進行大量資料轉換時會產生逾時的不明錯誤,故將此行拿掉,就可以正常運作了。
【SANKAI於2008-04-28補充】
【SANKAI於2008-04-28補充】
在PHP版本5.2.0之前,json_encode函式是不存在的,通常會發生這種情況最常見的原因就是所承租的主機所提供的PHP版本太舊,最近有在使用AJAX技術的人,想必一定會用到此函式,幸虧已經有高手Michal Migurski寫好這個好用的類別JSON.php,他的使用方法如下:
//載入JSON編碼類別 include_once('JSON.php'); //建立JSON編碼物件 $json = new Services_JSON(); //假設陣列資料 $data = array( 123, '中文', 'key' => 'value', array(1,2,3) ); //輸出編碼後的資料 echo $json->encode($data); //中文字碼會被自動轉換unicode的編碼 //輸出結果:{"0":123,"1":"\u4e2d\u6587","key":"value","2":[1,2,3]} //解碼範例 $jsonData = $GLOBALS['HTTP_RAW_POST_DATA']; echo $json->decode($jsonData);
你是否有發現,輸出結果的內容,是沒有斷行的,所有字串合成一行,這樣的格式並不方便閱讀,所以我來到PHP官方挖寶,果然json_encode函式下列補充回應內容中,就有其它PHP大師,由umbrae所提供了一個將json資料格式化的函式json_format(),可將json資料編排更容易閱讀的格式。
/***************************************** * 程式碼作者:umbrae * 程式碼來源:http://tw.php.net/json_encode * 程式碼說明:將JSON資料轉為可閱讀排版 ******************************************/ function json_format($json) { $tab = " "; $new_json = ""; $indent_level = 0; $in_string = false; $json_obj = json_decode($json); if(!$json_obj){ return false; } $json = json_encode($json_obj); $len = strlen($json); for($c = 0; $c不過在這邊特別要注意的是,json_format()中的第11行和第15行使用了json_decode()和json_encode()的函式,如果在PHP5.2.0環境下當然是正常,不過如果我們使用的是外部載入JSON.php函式,你必需將這兩行做稍微的修改(例如改為靜態用法Services_JSON::decode和Services_JSON::encode,才行正常的使用。不過最好再另外先一個類別來使用會更為方便。例如
/***************************************** * 程式合併者:liaosankai * 原程式碼來源:http://tw.php.net/json_encode * http://mike.teczno.com/JSON/JSON.phps * 程式碼說明:JSON.php強化版 ******************************************/ include_once('JSON.php'); class JSON extends Services_JSON { //=============== //強化encode函式 //=============== function encode($var,$format=false){ $json = parent::encode($var); if($format == false){ return $json; } else { return $this->json_format($json); } } //======================= // 將JSON資料轉為可閱讀排版 //======================= function json_format($json) { //程式碼省略,但請注意!! //必需將json_decode($json)改為$this->decode($json); //必需將json_encode($json)改為$this->enecode($json); } }如此一來使用$json->encode()只要多追加一個參數,就可以決定是否要以格式化方法回傳了,你可以在此下載已改寫過的JSON.php檔,注意在建立物件時,已變成$json = new JSON()了
全站熱搜
留言列表