2016-03-14 55 views
-1
工作

我的JSON是让服务器:json_decode不使用PHP

[{ “颜色”: “红色”, “大小”: “乔治王子”, “量”: “10”}],[{ “颜色”:“蓝色”,“尺寸”:“YXS”,“数量”:“10”}]

但是,json_decode无法将其转换回服务器之后的对象。使用var_dump,对象为null。我可以print_r变量,它打印出来很好。

任何想法? (我看到提交了其他问题,但我已经尝试了所有这些,没有任何工作)。

在JavaScript中构建JSON字符串,它将被保存到隐藏的表单字段中。

 var str = ""; 
    for(i=0;i<orderDetails.length;i++){ 
      str += JSON.stringify(orderDetails[i]) + ","; 
    } 
显示页面上

我:

<hr /> 

<?php 



var_dump(json_decode(($orderData))); 

?> 

的print_r($ orderData);显示我

json_decode($ orderData)粘贴的字符串为空

编辑:

更改我的JSON生成器来消除我的中间像@PaulPro括号建议。

 var str = ""; 
    for(i=0;i<orderDetails.length;i++){ 
      str += JSON.stringify(orderDetails[i]) + ","; 
    } 
    str = str.substr(0,str.length-1); // remove last comma 
    str = str.replace("],[",","); // remove brackets in the middle 
+2

向我们展示您的代码 –

回答

2

这不是JSON,它看起来像两个JSON数组通过逗号连接。这将是,如果整个事情是由[]包围有效的JSON使其成为一个数组的数组:

[[{"color":"Red","size":"YXS","quantity":"10"}],[{"color":"Blue","size":"YXS","quantity":"10"}]] 

这也将是有效的,如果你更换了],[只需,对象之间:

[{"color":"Red","size":"YXS","quantity":"10"},{"color":"Blue","size":"YXS","quantity":"10"}] 

为了将来的参考,您可以使用json_last_error和PHP 5.5+ json_last_error_msg协助调试json_decode和json_encode的问题。

+0

它引发了我在某处发生了错误的路径,因为我还没有完成PHP是一段时间。我在同一页面上有一个带有“订单详细信息”的表单。我是页面上的主要表单。然后我在页面上有第二个表单,当我提交该表单时,我使用jquery抓取提交并尝试构建基于字符串的数据,我可以将其添加到隐藏表单字段中,以便将单个帖子返回到服务器以处理数据。 – Scotty

+0

@Scotty在您的问题中看到编辑之后。我相信你可以用'JSON.stringify(orderDetails);'替换所有的代码。换句话说,一次将整个数组序列化为JSON,而不是逐个执行每个元素,然后将它们连接在一起。 – Paulpro

0

删除逗号附近的方括号,它将起作用!事实上,你在外部数组之间有两个数组,前面必须有一个方括号,在json字符串的末尾有一个方形括号才能使它工作。

0

你得到这个错误,因为你的json字符串无效。看起来,这应该是一个数组,但是括号里面没有。

$json = '[{"color":"Red","size":"YXS","quantity":"10"}],[{"color":"Blue","size":"YXS","quantity":"10"}]'; 
$validJson = "[$json]"; 
$data = json_decode($validJson, true);