在PHP中解码JSON对象数组,它是反斜杠吗?

时间:2011-10-24 08:59:56

标签: php jquery json

所以我在JSON字符串中使用javascript发布了一个对象数组到PHP脚本,我在php中解码它时遇到了真正的问题。

我的javascript如下:

$.ajax({
    type: 'POST',
    url: "question_save.php",
    data: {myJson:  JSON.stringify(jsonArray)},
    success: function(data){

        alert(data);

    }
});

发送给PHP的字符串如下所示:

[{"content":"Question text"},{"answerContent":"Some answer text","score":"234","responseChecked":0,"responseContent":""},{"answerContent":"","score":"0","responseChecked":0,"responseContent":""}]

如果我回复$ _POST ['myJson']我得到这个:

[{\"content\":\"Question text\"},{\"answerContent\":\"Some answer text\",\"score\":\"234\",\"responseChecked\":0,\"responseContent\":\"\"},{\"answerContent\":\"\",\"score\":\"0\",\"responseChecked\":0,\"responseContent\":\"\"}]

然而,当我想解码JSON并像这样循环时......

$json = $_POST['myJson'];
$data = json_decode($json, true);

foreach ($data as &$value) {
    echo("Hi there");
}

...我收到此错误:

Warning:  Invalid argument supplied for foreach() in /home/thecrime/public_html/test1/question_save.php on line 15

我真的不明白我犯的是什么愚蠢的错误,是否与反斜杠有关?

非常感谢任何帮助!

谢谢, -ben

2 个答案:

答案 0 :(得分:11)

使用stripslashes ( $string ) - http://php.net/manual/en/function.stripslashes.php

这应该有效

$json = $_POST['myJson'];
$json_string = stripslashes($json)
$data = json_decode($json_string, true);

// simple debug
echo "<pre>";
print_r($data);

但是,正如其他人已经指出的那样,最好禁用magic_quotes_gpc

打开您的php.ini文件并搜索此行:

magic_quotes_gpc = On

将其设置为Off并重新启动服务器。

答案 1 :(得分:3)

这与Magic Quotes有关 最好禁用这个恼人的旧功能并忘记这些问题 您可以在these instructions之后停用。