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

Posted

技术标签:

【中文标题】如何正确使用 JSON.stringify 和 json_decode()【英文标题】:how to use JSON.stringify and json_decode() properly 【发布时间】:2013-04-05 20:36:46 【问题描述】:

我试图通过以下方式将多维 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);

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

按照 Bart 的建议使用 json_last_error() 来解决这个问题,返回 JSON_ERROR_SYNTAX

【问题讨论】:

查看$_POST["JSONfullInfoArray"]的内容。如果无法解析 json_code 将只返回 null。也可以使用json_last_error() 来尝试找出问题所在。 表单的一点点 html 也会有所帮助。使用浏览器的检查器查看请求,你看到了你的期望吗? @Bart 看到上面的编辑,你把我带到了我需要的地方,抛出一个答案,我会接受它:),非常感谢你 这里的答案对我有用(而下面的所有其他“答案”都没有!)。 谢谢伙计。您的解决方案效果很好! 【参考方案1】:

我不知道它是如何工作的,但它确实有效。

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

【讨论】:

【参考方案2】:

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

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

感谢@Thisguyhastwothumbs

【讨论】:

好的,这就像正确的答案,也是我想要的。为我节省了几个小时令人作呕的反复试验。 谢谢这对我有用!!! ...在 $request["reporthead"] 数据中作为字符串来自 javascript $tempData = \html_entity_decode(stripslashes ($request["reporthead"])); $reportheaddata = json_decode($tempData, true);【参考方案3】:
jsonText = $_REQUEST['myJSON'];

$decodedText = html_entity_decode($jsonText);

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

【讨论】:

【参考方案4】:

在我的情况下,其他答案均无效,很可能是因为 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"]);

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

【讨论】:

我还必须在 PHP 上使用 urldecode 才能正常工作。 正如@Albion 指出的那样,在调用json_decode 之前,需要对字符串进行URI 解码。 json_decode(urldecode($_POST["JSONfullInfoArray"]));【参考方案5】:

您需要检查$_POST["JSONfullInfoArray"] 的内容。如果无法解析 json_decode 将只返回 null。这不是很有帮助,所以当 null 返回时,您应该检查 json_last_error() 以获取有关问题的更多信息。

【讨论】:

【参考方案6】:
stripslashes(htmlspecialchars(JSON_DATA))

【讨论】:

我不知道为什么htmlspecialchars() 必须在那里。它将引号字符(")转换为",这意味着json_decode() 无法处理。我确定JSON 格式一定是"key":"value",但是通过使用htmlspecialchars() 它将转换为"key":"value" json_decode() 怎么处理它? 【参考方案7】:

当您使用 JSON 字符串化时,请先使用 html_entity_decode,然后再使用 json_decode。

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

【讨论】:

在 wp 中值得注意的是,我在 html_entity_decode 中使用了上面的带斜杠来工作:

以上是关于如何正确使用 JSON.stringify 和 json_decode()的主要内容,如果未能解决你的问题,请参考以下文章

如何获取 JSON stringify 的错误消息?

“JSON.parse”和“JSON.stringify”有啥区别?

JSON.stringify(2) == "2" 可能返回 false 是不是正确?

js数组使用JSON.stringify和toString的区别

在 JSON.stringify 中使用变量

如何使用 JSON.parse() 显示正确的值?