在PHP後端和客戶端資料互動的過程中,JSON資料中有時格式不定,一會兒是數組,一會兒是對象,弄得客戶端開發人員要崩潰的感覺。
因此,前後端相關人員先對PHP的json_encode函數原理有必要的了解是最重要的一環。
PHP中的array是個萬能的資料結構,並不像其它語言根據需要的場景會定義很多約束性的資料類型來描述結構,所以PHP程式設計師是很難給客戶端人員講清楚返回的是什麼結構的數據的。
也變成明明是透過PHP的陣列資料編碼成json的,但輸出值有時是陣列、有時是物件的情況。
<?php /* 如果你想生成一个json格式的数组格式(Vector)而非对象格式(Map)的,那么数据的下标: 必须是数字索引, 必须从0开始, 必须从小到大依次增加、中间不可以跳跃、顺序不可变动. */ //符合数组 $vector = [ 12, 23, 18 ]; echo json_encode($vector); //符合数组 $vector2 = [ 0 => 12, 1 => 23, 2 => 18 ]; echo json_encode($vector2); //不符合数组,下标有跳跃 $map = [ 0 => 12, 1 => 23, 2 => 18, 4 => 20 ]; echo json_encode($map); //不符合数组,下标顺序不对 $map = [ 0 => 12, 1 => 23, 3 => 18, 2 => 20 ]; echo json_encode($map); //不符合数组,下标没有从0开始 $map_1 = [ 1 => '111', 2 => 'asdfa' ]; echo json_encode($map_1); //典型的对象格式 $map_2 = ['abc' => 1, 'de' => 2, 'fi' => null]; echo json_encode($map_2); /** * 请注意上面的变量命名,对应于Hack中的概念,Vector和Map为两种数据集合类型 * 如果你需要将"索引数组"强制转化成"对象",可以这样写 * json_encode((object) $a); * 或 * json_encode ($a, JSON_FORCE_OBJECT); * */
解決方案是什麼?
就是透過PHP封裝Vector和Map這兩種資料結構的類,在建構json輸出結構時,以這兩種類型做封裝和轉換,來確保結構的確定性。
以上所述是小編給大家介紹的PHP JSON數組與對象,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回覆大家的。在此也非常感謝大家對腳本之家網站的支持!