json_decode无法使用php

时间:2016-03-14 23:37:36

标签: php json

我的json正在进入服务器:

[{ “颜色”: “红”, “大小”: “YXS”, “数量”: “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

3 个答案:

答案 0 :(得分: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的问题。

答案 1 :(得分:0)

删除逗号旁边的方括号,它会起作用!实际上,在外部数组之间有两个数组,前面必须有一个方括号,在json字符串末尾有一个右方括号,以使其工作。

答案 2 :(得分:0)

您收到此错误,因为您的json字符串无效。看起来,这应该是一个数组,但缺少括号。

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