JSON處理是WordPress開發中的經常需要處理的一項工作,為此WordPress 定義了一堆JSON處理的函數,下面由WordPress教程專欄給大家做一下統一的介紹。
wp_json_encode
#編碼成 JSON,並且進行一些完整性檢查。
wp_json_encode( $data, $options = 0, $depth = 512 )
簡單說下 WordPress 引進這個函數的原因:
首先不同 PHP 版本 json_encode 函數支援不同的參數。 PHP 5.3 之前只支援 一個參數 $data,PHP 5.3 引進了 $options 參數,PHP 5.5 又引進了 $depth 參數。所以 WordPress 適配不同版本的 PHP,wp_json_encode 都支援三個參數,相容於不同版本的 PHP。
在json_encode 之前,wp_json_encode 使用函數_wp_json_prepare_data 對資料進行清理,如果boolean,integer,double,string,NULL 這些類型,直接返回,如果數組,繼續使用_wp_json_prepare_data 函數對數組中的每個元素進行清理,如果是對象,如果該對象的class 實現了JsonSerializable 接口,則返回$data = $data->jsonSerialize(),否則,繼續使用_wp_json_prepare_data 對對像中的每個屬性進行清理。
然後使用 json_encode 進行編碼,如果不成功,則使用 _wp_json_sanity_check 對資料進行完整性處理,最後再使用 json_encode 進行編碼。 _wp_json_sanity_check 主要使用函數 _wp_json_convert_string 對資料進行深度 UTF-8 檢測和轉換。
所以建議使用 wp_json_encode 對變數進行 JSON 編碼,它的可靠性更高。
wpjam_json_encode
wp_json_encode( $data, $options = JSON_UNESCAPED_UNICODE, $depth = 512 )
PHP5.4 JSON 新增了一個選項:JSON_UNESCAPED_UNICODE,故名思議:不要編碼成 Unicode,讓中文更可讀。
所以我們寫了一個wpjam_json_encode 函數,相較於wp_json_encode,就是將$options 參數預設值設為JSON_UNESCAPED_UNICODE,這樣直接使用wpjam_json_encode($data),中文。
只要你安裝 WPJAM Basic 插件,你的 WordPress 就會有這個函數。
wp_send_json
直接傳送 JSON 資料。
wp_send_json( $response, $status_code = null )
他先輸出 application/json 的 Content-Type 頭,如果 $status_code 不為空,則輸出 $status_code 的狀態碼。
然後呼叫 wp_json_encode 對資料進行編碼。
wpjam_send_json
wpjam_send_json( $response, $status_code = null )
同樣為了能夠JSON 編碼之後,中文更可讀,我們也寫了wpjam_send_json 函數,它和wp_send_json 幾乎一致,只是調用對資料進行編碼的函數是wpjam_json_encode。
另外如果傳入的資料是 WP_Error 的實例,那麼 wpjam_send_json 直接輸出 errcode 和 errmsg JSON。如果沒有設定 errcode,則 wpjam_send_json 自動加上 errcode=>0
安裝 WPJAM Basic 插件,你的 WordPress 就會有這個函數。
wp_send_json_success 和wp_send_json_error
WordPress 也提供wp_send_json_success 和wp_send_json_error 兩個函數:##rrrereee_ccoo,然後把輸出為#json_cc資料$data 放到data 裡面輸出。 wp_send_json_error 則會判斷 $data 是否為 WP_Error 實例,如果是,則輸出 code 和 message 的陣列。我們實現的 wpjam_send_json 已經能夠自動化處理這些錯誤了。
wp_is_json_request
判斷目前請求是不是JSON 請求,或是回傳JSON 結果,這個函數沒有參數,直接使用:
它透過判斷$_SERVER['HTTP_ACCEPT'] 中含有application/json,或$_SERVER['CONTENT_TYPE'] 等於application/json。
#判斷目前請求是不是JSONP 請求,或是回傳JSONP 結果,這個函數沒有參數,直接使用:
它先判斷$_GET['_jsonp'] ,是否存在,然後透過函數wp_check_jsonp_callback 判斷它的值是否合法。
#判斷JSONP callback 是不是一個合法的JavaScript callback 函數:
合法的JavaScript callback 函數只能數字加字符,以及英文點號。
以上是WordPress JSON 處理相關函數大全的詳細內容。更多資訊請關注PHP中文網其他相關文章!