无法json_decode我用JSON.stringify()发送的对象

时间:2013-11-19 21:03:19

标签: php json stringify

我有一个脚本,在JSON.stringify()之后用AJAX发布一个大对象。

当我尝试使用json_decode($object, true);在PHP中对其进行解码时,它将不会被解码。

我的对象看起来像:

var object = [
    {field_name:"Date & Time", some_other_value:"somevalue1"}
]

我很确定它与Date & Time有关。我很确定在构建对象时,我插入field_name的值是Date & Time

在PHP中,我尝试过:

json_decode($object, true);
json_decode(utf8_decode($object))// with true as well.
json_decode(htmlentities($object, ENT_QUOTES, "UTF-8");

似乎无效。

更新: 我在stringify上使用了alert(),这就是我得到的:

"fields":{"29411502":{"id":29411502,"name":"Date & Time","functionName":""}}

有想法的人吗?

5 个答案:

答案 0 :(得分:1)

如果有人关心解决方案:

我必须在字符串化对象上使用encodeURIcomponenet()

答案 1 :(得分:0)

如果删除&字符是PHP脚本突然能够正确解码对象吗?

是这样,你可能需要在&符号上进行双重编码吗?是否有可能在消息的其余部分之前对其进行解码并导致解析中断?

答案 2 :(得分:0)

此:

<?php

var_dump(
    json_decode(
        '[
            {"field_name":"Date &amp; Time", "some_other_value":"somevalue1"},
            {"field_name":"Date &amp; Time", "some_other_value":"somevalue2"},
            {"field_name":"Date &amp; Time", "some_other_value":"somevalue3"}
        ]'
    ),
    json_last_error(),
    PHP_VERSION
);

?>

结果:

array(3) {
  [0]=>
  object(stdClass)#1 (2) {
    ["field_name"]=>
    string(15) "Date &amp; Time"
    ["some_other_value"]=>
    string(10) "somevalue1"
  }
  [1]=>
  object(stdClass)#2 (2) {
    ["field_name"]=>
    string(15) "Date &amp; Time"
    ["some_other_value"]=>
    string(10) "somevalue2"
  }
  [2]=>
  object(stdClass)#3 (2) {
    ["field_name"]=>
    string(15) "Date &amp; Time"
    ["some_other_value"]=>
    string(10) "somevalue3"
  }
}
int(0)
string(17) "5.3.15-pl0-gentoo"

似乎对我来说......

答案 3 :(得分:0)

为我工作

的test.html

<html>
<body>
<script src="js/jquery/jquery-2.0.3.js"></script>
<button id="bob">Click ME</button>
<script>
(function($){
  $('#bob').click(function() {
    $.ajax({
      method: "POST",
      url: "test.php",
      data: JSON.stringify([{"this":"is &amp; test"}]),
      contentType: "text/javascript"
    }).done(function(a) {
      alert(a);
    });
  });
})(jQuery);
</script>
</body>
</html>

test.php的

<?php

$data = file_get_contents("php://input");

var_dump($data);

var_dump(json_decode($data, true));

制作一个漂亮的

弹出窗口
string(26) "[{"this":"is &amp; test"}]"
array(1) {
  [0] =>
  array(1) {
    'this' =>
    string(13) "is &amp; test"
  }
}

答案 4 :(得分:-2)

在参数和值

周围放置单引号
var object = [
{'field_name':'Date &amp; Time', 'some_other_value':'somevalue1'},
....