php解析json時遇到的坑爹問題

ajax關鍵代碼以下php

var myArray={id:"1",type:"new",status:"good"};
$.post("test.php", {'do':'save','myArray':JSON.stringify(myArray)},function(data){
		console.log(data);
	});
//post方式發送兩個參數do和myArray,其中myArray是一個通過序列化後的json字符串

php中關鍵代碼以下前端

//接收post傳遞的參數
$do=$_POST['id'];
$myArray=$_POST['myArray'];
//解析json字符串
$arr=json_decode($myArray,true);
var_dump($arr);//結果竟然輸出 null

求助萬能的百度(谷歌被牆失聯了:P)有人說是跟contentType設置有關,也有人說要使用高深的file_get_contents("php://input"),按照這兩個方向搞了半天,最後仍是沒搞出來...ajax

後來我把接收到的json字符串不作處理直接打印出來,發現字符串相似這樣json

string '{\"id\":\"1\",\"type\":\"new\",\"status\":\"good\"}'

與前端經過JSON.stringify()生成的json字符串對比數組

{"title_1_6":"effect_6,0.6,1.0","telecom_1_4":"effect_11,0.6,1.0"}

發現多了許多斜槓:\,也就是說,系統自動給傳入的標準的json字符串中的引號加入了轉義處理,這樣它就不是一個標準的json字符串了!所以須要對它作反轉義處理,以下:post

$arr=json_decode(stripslashes($_POST['myArray']),true) //去掉字符串中的斜槓轉義符,成功

搞了半天頭暈眼花,原來這就是一個json基礎格式問題!!!spa

另外,php中自動給json字符串加入轉義處理的功能是由於開啓了設置code

magic_quotes_gpc=On

經過下面的方法能夠自動判斷是否開啓此設置,並做相應處理
對象

 $json_string = $_POST["json_str"];  
 if(ini_get("magic_quotes_gpc")=="1") {  
     $json_string=stripslashes($json_string);  
 }  
 $user = json_decode($json_string, true);//true表示把json轉換成數組而不是對象
相關文章
相關標籤/搜索