function data($html' target='_blank'>value) { $res = json_decode($value, true); $error = json_last_error(); if (!empty($error)) { echo "<pre>"; print_r($value); echo "</pre>"; } return $res;}
延伸:json_last_error可以判斷返回 JSON 編碼解碼時最后發生的錯誤。 錯誤如下:有對應的數字編碼,但是只要非空,就表示有錯誤,對于一般的json格式校驗來說,已經足夠了!
人性化的輸出json錯誤!0 = JSON_ERROR_NONE No error has occurred
1 = JSON_ERROR_DEPTH The maximum stack depth has been exceeded
2 = JSON_ERROR_STATE_MISMATCH Invalid or malformed JSON
3 = JSON_ERROR_CTRL_CHAR Control character error, possibly incorrectly encoded
4 = JSON_ERROR_SYNTAX Syntax error
5 = JSON_ERROR_UTF8 Malformed UTF-8 characters, possibly incorrectly encoded PHP 5.3.3
<?php if (!function_exists('json_last_error_msg')) { function json_last_error_msg() { static $ERRORS = array( JSON_ERROR_NONE => 'No error', JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)', JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded', JSON_ERROR_SYNTAX => 'Syntax error', JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded' ); $error = json_last_error(); return isset($ERRORS[$error]) ? $ERRORS[$error] : 'Unknown error'; } }2、帶中文字的數組轉json方法一(推薦)加參數:JSON_UNESCAPED_UNICODE
$array = array('key' => 'value', 'test' => array('測試一下', 2, 3));echo "<pre>";print_r(json_encode($array, JSON_UNESCAPED_UNICODE));echo "</pre>";exit;
//將漢字,特殊字符原樣變成json數據function ch_json_encode($data) { $ret = ch_urlencode($data); $ret = json_encode($ret); return '/'' . addslashes(urldecode($ret)) . '/'';}//漢字,特殊字符變可讀懂的字符串主程序function ch_urlencode($data) { if (is_array($data) || is_object($data)) { foreach ($data as $k => $v) { if (is_scalar($v)) { if (is_array($data)) { $data[$k] = urlencode($v); } else if (is_object($data)) { $data->$k = urlencode($v); } } else if (is_array($data)) { $data[$k] = ch_urlencode($v); // 遞歸調用該函數 } else if (is_object($data)) { $data->$k = ch_urlencode($v); } } } return $data;}
php5.2以后自帶json_decode函數,但是對json文本串的格式要求非常嚴格。
很可能使用該函數得到的返回值是NULL,沒有返回數組只有可能要么是編碼問題,要么就是json返回的數據又特殊字符別無其他原因,下面是解決方法:
可以使用使用json_last_error()函數獲取到的返回值來幫助我們判斷出問題的原因。
其中如果提示錯誤JSON_ERROR_SYNTAX(Syntax error),表示json串格式錯誤。
可以通過以下幾個方式排錯:
json字符串必須以雙引號包含
$output = str_replace("'", '"', $output);
json字符串必須是utf8編碼
$output = iconv('gbk', 'utf8', $output);
3.不能有多余的逗號 如:[1,2,],用正則替換掉
preg_replace('/,/s*([/]}])/m', '$1', $output)4、不能有換行、制表符:這個非常坑,經常排除了所有的錯誤還是出不來,就是這個地方,多了個換行符啥的,尤其是在excel編輯之后再導入到數據庫,然后再用php取出的時候!
$jsonstr = '{"succ":true,"data":{"id":"31","keywords":"","description":"","jianjie":" ","jianjie_short":"bb","nav":"ccc","deleted":"0","url":"http:////travel.sina.com.cn//beijing//"}}';//$ret=preg_replace("//t/", " ", $ret); //$jsonstr = preg_replace("//n/", ' ', $jsonstr);$jsonstr = str_replace("/n", ' ', $jsonstr);//print_r($jsonstr);exit;//$jsonstr = str_replace ('/n','', $jsonstr);$jd = json_decode($jsonstr,true);$errorinfo = json_last_error();//print_r(JSON_ERROR_DEPTH);print_r($jd);
當對UTF-8編碼的文件進行操作時,如果要把讀取的內容當作文本內容來處理,最好先對BOM進行一些處理,這個問題在PHP6中得到了解決(可以設置文本/二進制讀取模式),有興趣的朋友可以自己查找PHP6的手冊。
相關推薦:
PHP如何判斷json格式是否正確
以上就是php判斷json格式是否正確的方法的詳細內容,更多請關注 其它相關文章!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答