如何正确使用JSON.stringify和json_decode()

时间:2013-04-13 09:20:16

标签: php javascript arrays json stringify

我试图通过以下方式将多维Javascript数组传递到我网站上的另一个页面:

  • 在数组上使用JSON.stringify

  • 将结果值分配给输入字段

  • 将该字段发布到第二页

  • 在发布值上使用json_decode

  • 然后var_dump进行测试

  • (直接回显发布的变量,看它是否通过 在所有)

第一页的Javascript:

var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;
第二页

php:

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

echo工作正常,但var_dump返回NULL

我做错了什么?


这让我解决了问题:

$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);

我不知道为什么但是帖子是用一串“\”字符分隔字符串中的每个变量

使用json_last_error()计算出来的东西被巴特吮吸,返回JSON_ERROR_SYNTAX

7 个答案:

答案 0 :(得分:21)

当您使用JSON stringify时,请先在json_decode之前使用html_entity_decode。

$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);

答案 1 :(得分:20)

您需要检查$_POST["JSONfullInfoArray"]的内容。如果某些内容无法解析json_decode,则只会返回null。这不是很有用,因此当返回null时,您应该检查json_last_error()以获取有关错误的更多信息。

答案 2 :(得分:9)

在我的案例中没有其他答案有效,很可能是因为JSON数组包含特殊字符。为我修好了什么:

Javascript(已添加encodeURIComponent)

var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray));
document.getElementById('JSONfullInfoArray').value = JSONstr;

PHP(问题未修改)

$data = json_decode($_POST["JSONfullInfoArray"]);
var_dump($data);

echo($_POST["JSONfullInfoArray"]);

对于包含URL字段和长文本字段的超过2000个用户输入数据集的样本,已验证echo和var_dump都能正常工作,并且在var_dump上为包含URL的子集返回NULL字符?&#

答案 3 :(得分:8)

stripslashes(htmlspecialchars(JSON_DATA))

答案 4 :(得分:8)

使用JSON.stringify()保存一些数据然后需要在php中读取。以下代码对我有用。

json_decode( html_entity_decode( stripslashes ($jsonString ) ) );

感谢@Thisguyhastwothumbs

答案 5 :(得分:2)

jsonText = $_REQUEST['myJSON'];

$decodedText = html_entity_decode($jsonText);

$myArray = json_decode($decodedText, true);`

答案 6 :(得分:0)

我不知道这是怎么回事,但是它起作用了。

$post_data = json_decode(json_encode($_POST['request_key']));