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

Del*_*D0D 43 javascript php arrays json stringify

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

  • 在数组上使用JSON.stringify

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

  • 将该字段发布到第二页

  • 在发布的值上使用json_decode

  • 然后var_dump来测试

  • (直接回显发布的变量,看它是否完全通过)

第一页的Javascript:

var JSONstr = JSON.stringify(fullInfoArray);
document.getElementById('JSONfullInfoArray').value= JSONstr;
Run Code Online (Sandbox Code Playgroud)

第二页的PHP:

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

echo($_POST["JSONfullInfoArray"]);
Run Code Online (Sandbox Code Playgroud)

echo工作正常,但var_dump返回NULL

我做错了什么?


这让我解决了:

$postedData = $_POST["JSONfullInfoArray"];
$tempData = str_replace("\\", "",$postedData);
$cleanData = json_decode($tempData);
var_dump($cleanData);
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但帖子是通过一堆"\"字符分隔字符串中的每个变量

使用json_last_error()Bart返回时将其弄清楚JSON_ERROR_SYNTAX

use*_*928 25

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

$tempData = html_entity_decode($tempData);
$cleanData = json_decode($tempData);
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,我在html_entity_decode中使用了带有stripslashes的上述内容来完成工作: (3认同)

Bar*_*art 21

你需要检查一下内容$_POST["JSONfullInfoArray"].如果没有解析的东西json_decode就会返回null.这不是很有帮助所以当null返回时你应该检查json_last_error()以获得有关出错的更多信息.


S. *_*lik 14

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

json_decode( html_entity_decode( stripslashes ($jsonString ) ) );
Run Code Online (Sandbox Code Playgroud)

感谢@Thisguyhastwothumbs


小智 8

stripslashes(htmlspecialchars(JSON_DATA))
Run Code Online (Sandbox Code Playgroud)

  • 我不确定为什么`htmlspecialchars()`必须在那里.它会将引号字符(```)转换为`````这是json_decode()`无法处理的意思.我确信`JSON`格式必须是`{"key":"value "}`,但是通过使用`htmlspecialchars()`它将转换为`{" key":" value"}``json_decode()`如何处理它? (2认同)

Yuv*_*Yuv 8

其他答案都不适用于我的情况,很可能是因为JSON数组包含特殊字符.为我修好了什么:

Javascript(添加了encodeURIComponent)

var JSONstr = encodeURIComponent(JSON.stringify(fullInfoArray));
document.getElementById('JSONfullInfoArray').value = JSONstr;
Run Code Online (Sandbox Code Playgroud)

PHP(与问题相同)

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

echo($_POST["JSONfullInfoArray"]);
Run Code Online (Sandbox Code Playgroud)

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

  • 正如@Albion指出的那样,在调用`json_decode`之前,需要对字符串进行URI解码.`json_decode(urldecode($ _ POST [ "JSONfullInfoArray"]));` (3认同)
  • 我还必须在PHP上使用`urldecode`才能正常工作. (2认同)