【问题标题】:Why json_decode doesn't work for me?为什么 json_decode 对我不起作用?
【发布时间】:2023-04-03 12:35:02
【问题描述】:

我在这里有点困惑。如果我将变量传递给 json_decode,它就不起作用:

$stringJSON = $_GET['jsonstring'];  
echo $stringJSON;
$stringObject = json_decode($stringJSON);
var_export($stringObject);

第一个回显正确地显示了我传递的 JSON 字符串,例如

{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}

第二个回显显示 NULL。 所以我从第一个回显中获取字符串并编写以下代码:

$stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}");
var_export ($stringObject);

你说什么,它显示了正确解码的数组。字符串是完全一样的,我什至保留了转义字符。或者他们可能是问题所在?

【问题讨论】:

    标签: php json


    【解决方案1】:

    您的服务器似乎启用了magic_quotes_gpc。在使用之前disable it 或运行$stringJSONstripslashes()

    $stringJSON = get_magic_quotes_gpc() ?
        stripslashes($_GET['jsonstring']) : $_GET['jsonstring'];
    

    【讨论】:

    • 如果它包含 UTF 编码的文本,它会破坏内容,因为它也会被删除
    • @aokaddaoc 你当然是对的。最好的选择是禁用魔术引号
    【解决方案2】:

    这个

    [{\"Name\":\"name\",\"Description\":\"\"]
    

    需要

    [{\"Name\":\"name\",\"Description\":\"\"}]
    

    你错过了结束}

    【讨论】:

      【解决方案3】:

      运行 json_decode 两次。

      $str = json_decode($jsonData,true);
      $str = json_decode($str,true);
      

      它可能对某人有所帮助。

      【讨论】:

      • 我不知道为什么......但它确实对我有用:)
      【解决方案4】:

      如果当你echo它时它显示一个带有斜线的字符串,这意味着该字符串中有斜线。这不是一个有效的 JSON 字符串,斜线不属于那里。如果将该字符串粘贴到 PHP 中,则斜杠由 PHP 计算。 PHP 源代码中的字符串文字 "\"" 计算结果为字符串 ",因此斜杠被有效删除,您正在解码一个有效的 JSON 字符串。

      我怀疑您有 Magic Quotes 正在将斜杠插入 GET 值,请将其关闭。

      【讨论】:

        【解决方案5】:

        这是一个引用问题:尝试以下操作

        $stringObject = json_decode("{\"Items\":[{\"Name\":\"name\",\"Description\":\"\"],\"Name\":\"Christmas\"}");
        echo $stringObject;
        var_export ($stringObject);
        

        如您所见,$stringObject 没有引号(但来自 $_GET 的有引号)

        所以你可能需要

        $stringJSON = $_GET['jsonstring'];  
        $stringObject = json_decode(stripslashes($stringJSON));
        var_export($stringObject);
        

        【讨论】:

          【解决方案6】:
          json_encode($str, JSON_UNESCAPED_SLASHES);
          

          它可能会帮助你。

          【讨论】:

            猜你喜欢
            • 2016-05-31
            • 2010-10-08
            • 2016-02-27
            • 2019-01-13
            • 2015-09-07
            • 1970-01-01
            • 1970-01-01
            • 2011-09-04
            • 2011-10-15
            相关资源
            最近更新 更多