如何正确使用 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.parse”和“JSON.stringify”有啥区别?
JSON.stringify(2) == "2" 可能返回 false 是不是正确?