doudun1934
2014-04-04 01:08
浏览 380
已采纳

为什么json_decode($ data,TRUE)将数组转换为字符串?

JavaScript Code:

$.ajax({
  type: "POST",
  url: "postTestingResult.php",
  data: {data: JSON.stringify(sendData)},
  dataType: "json",
  success: ajaxSuccess,
  error: ajaxError
});

PHP Code

$data = json_decode($_POST['data'], TRUE);

When I POST a complex data structure to the server, the outermost array is becoming a string. For example, the JavaScript object could be

var data = {"apps": [[1,2,3], [4,5,6]]}

Using JSON.stringify(data) this becomes

"{"apps": "[[1,2,3], [4,5,6]]"}" //As seen via console.log(data) in Chrome console

But after doing the json_decode($_POST['data'], TRUE) it becomes

array('apps' => '[[1,2,3], [4,5,6]]') //As seen via var_export($data, TRUE)

What's going on here? Why is the the array being converted to a string? To see the full JSON object and the full PHP object check out this pastebin with the two.

Any help is greatly appreciated, thank you.

UPDATE: Answer found I found the main culprit. I am also using Prototype.js and it was adding a toJSON method to the Object prototypes. Check out this SO question for details.

图片转代码服务由CSDN问答提供 功能建议

JavaScript代码:

  $ .ajax({
 键入:“POST”,
 url:“postTestingResult.php”,
 data:{data:JSON.stringify(sendData)},
 dataType:“json”,
成功:ajaxSuccess,
错误:ajaxError  
}); 
   
 
 

PHP代码

  $ data = json_decode($ _ POST ['data']  ,TRUE); 
   
 
 

当我将复杂的数据结构发布到服务器时,最外层的数组正在变成一个字符串。 例如,JavaScript对象可以是

  var data = {“apps”:[[1,2,3],[4,5,6]]} 
    
 
 

使用JSON.stringify(数据)这将成为

 “{”apps“:”[[1,2  ,3“,[4,5,6]]”}“//通过Chrome控制台中的console.log(数据)看到
   
 
 

但是 json_decode($ _ POST ['data'],TRUE)它变为

  array('apps'=>'[[1,2,3],[4,5]  ,6]]')//通过var_export看到($ data,TRUE)
   
 
 

这里发生了什么? 为什么数组被转换为字符串? 要查看完整的JSON对象和完整的PHP对象,请使用这两个检查此pastebin。

非常感谢任何帮助。谢谢。

更新:找到答案 我发现了罪魁祸首。 我也在使用Prototype.js,它正在向Object原型添加一个toJSON方法。 查看此SO问题了解详情

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题