json_encode()函數(shù)是一個在php中可以把數(shù)組轉(zhuǎn)換成json格式的函數(shù)了,但json_encode函數(shù)對于英文是沒有任何問題,如果碰到中文或編碼有不致情況時會出現(xiàn)中文轉(zhuǎn)換之后變空了,下面我就來從多方面來介紹php返回json數(shù)據(jù)應(yīng)用與一些使用轉(zhuǎn)換時的問題解決辦法.
json_encode()函數(shù)用法:echo json_encode(array('a'=>'bbbb','c'=>'ddddd');
這樣就會生成一個標準的json格式的數(shù)據(jù),代碼如下:
- <?php
- //需要執(zhí)行的SQL語句
- //單條
- $sql="select id,name from tbl_user where id=1";
- //多條數(shù)據(jù)
- //$sql="select id,name from tbl_user";
- //調(diào)用conn.php文件進行數(shù)據(jù)庫操作
- require('Conn.php');
- //提示操作成功信息,注意:$result存在于conn.php文件中,被調(diào)用出來
- if($result)
- {
- // $array=mysql_fetch_array($result,MYSQL_ASSOC);
- /*數(shù)據(jù)集
- $users=array();
- $i=0;
- while($row=mysql_fetch_array($result,MYSQL_ASSOC)){
- echo $row['id'].'-----------'.$row['name'].'</br>';
- $users[$i]=$row;
- $i++;
- }
- echo json_encode(array('dataList'=>$users));
- */
- /*單條數(shù)據(jù)*/
- $row=mysql_fetch_row($result,MYSQL_ASSOC);
- echo json_encode(array('jsonObj'=>$row));
- }
- mysql_free_result($result);
- //釋放結(jié)果
- mysql_close();
- //關(guān)閉連接
- ?>
上面是數(shù)據(jù)庫生成json數(shù)據(jù)了.
單條數(shù)據(jù):{"jsonObj":{"id":"1","name":"lmw"}}
多條數(shù)據(jù):{"dataList":[{"id":"1","name":"lmw"},{"id":"2","name":"xxj"},{"id":"3","name":"xxxj"}]}
現(xiàn)在很多情況下,我們需要程序返回一個Json格式的結(jié)果,代碼如下:
- {
- "UserKeyGetResponse":
- {"RequestName":"e99e6d63e8c712d7699f52978a","api_key_value":"41954dd9b1cb6a95802eab6810"},
- "error_response":
- {"code":"NO_ERROR","msg":"獲取系統(tǒng)參數(shù)成功"}
- }
可以將結(jié)果寫成這樣的數(shù)組形式:
$respon = array('UserKeyGetResponse' => array('RequestName' => $api_request_name, 'api_key_value' => $api_key_value),'error_response' => array('code' => 'NO_ERROR', 'msg' => '獲取系統(tǒng)參數(shù)成功'));
PHP實例代碼如下:
- function arrayRecursive(&$array, $function, $apply_to_keys_also = false)
- {
- static $recursive_counter = 0;
- if (++$recursive_counter > 1000) {
- die('possible deep recursion attack');
- }
- foreach ($array as $key => $value) {
- if (is_array($value)) {
- arrayRecursive($array[$key], $function, $apply_to_keys_also);
- } else {
- $array[$key] = $function($value);
- }
- if ($apply_to_keys_also && is_string($key)) {
- $new_key = $function($key);
- if ($new_key != $key) {
- $array[$new_key] = $array[$key];
- unset($array[$key]);
- }
- }
- }
- $recursive_counter--;
- }//開源代碼Vevb.com
- g:
- $error_respon = array('code' => 'ERROR_MSG_MISS', 'msg' => '消息不存在');
- echo JSON($array);
結(jié)果為:{"code":"ERROR_MSG_MISS","msg":"消息不存在"}
客戶端就可以解析這個結(jié)果了,當(dāng)然錯誤碼要用數(shù)字代替,這樣就好多了我們顯示的直接是中文了,當(dāng)然顯示那個16進制的編碼也是沒有問題的.
新聞熱點
疑難解答