php解析json时遇到的坑爹问题

ajax关键代码如下

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"),按照这两个方向搞了半天,最后还是没搞出来...

后来我把接收到的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字符串了!因此需要对它做反转义处理,如下:

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

搞了半天头晕眼花,原来这就是一个json基础格式问题!!!

另外,php中自动给json字符串加入转义处理的功能是因为开启了设置

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转换成数组而不是对象

转载于:https://my.oschina.net/codespring/blog/412959

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值