码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-05-10 13:01:53      阅读:142      评论:0      收藏:0      [点我收藏+]

标签:

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

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

标签:

原文地址:http://my.oschina.net/codespring/blog/412959

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!