【问题标题】:how to use JSON.stringify and json_decode() properly如何正确使用 JSON.stringify 和 json_decode()
【发布时间】: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 看到上面的编辑,你把我带到了我需要的地方,抛出一个答案,我会接受它:),非常感谢你
  • 这里的答案对我有用(而下面的所有其他“答案”都没有!)。
  • 谢谢伙计。您的解决方案效果很好!

标签: php javascript arrays json stringify


【解决方案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 中使用了上面的带斜杠来工作:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 2015-03-31
        • 2013-12-03
        • 1970-01-01
        相关资源
        最近更新 更多