从$ _POST中的json读取关联数组

时间:2011-04-27 15:54:34

标签: php json post http-post associative-array

我正在使用jQuery将json对象发布到我的php应用程序。

jQuery.post("save.php",JSON.stringify(dataToSend), function(data){ alert(data); });

从firebug拉出的json字符串看起来像这样

{ "data" : [ { "contents" : "This is some content",
        "selector" : "DIV.subhead"
      },
      { "contents" : "some other content",
        "selector" : "LI:nth-child(1) A"
      }
    ],
  "page" : "about_us.php"
}

在php中我试图把它变成一个关联数组。

到目前为止,我的PHP代码是

<?php
$value = json_decode(stripcslashes($_POST));
echo $value['page'];
?>

对ajax调用的响应应为“about_us.php”,但它会返回空白。

6 个答案:

答案 0 :(得分:86)

如果请求正文不是标准的urlencoded格式,则不会填充

$_POST

相反,请从这样的read-only php://input stream读取以获取原始请求正文:

$value = json_decode(file_get_contents('php://input'));

答案 1 :(得分:16)

您可以避免使用JSON.stringifyjson_decode

jQuery.post("save.php", dataToSend, function(data){ alert(data); });

<?php
echo $_POST['page'];
?>

<强>更新

...但如果您真的想要使用它们,那么:

jQuery.post("save.php",  {json: JSON.stringify(dataToSend)}, function(data){ alert(data); });

<?php
$value = json_decode($_POST['json']);
echo $value->page;
?>

答案 2 :(得分:3)

如果你想要关联数组,则将第二个参数传递为true,否则它将保持返回对象。

$value = json_decode(stripslashes($_POST),true);

答案 3 :(得分:1)

尝试:

echo $value->page;

因为json_decode的默认行为是返回stdClass类型的对象。

或者,将第二个可选$assoc参数设置为true

$value = json_decode(stripslashes($_POST), true);
echo $value['page'];

答案 4 :(得分:1)

看起来jQuery可能以urlencoded格式编码javascript对象,然后将填充到$ _POST中。至少来自他们的examples。我会尝试将您的对象传递到post()而不进行字符串化。

答案 5 :(得分:0)

如果要将json数据用作关联数组,可以尝试如下:

ToolStripItem