为什么json_decode对我不起作用?

时间:2012-01-18 03:22:11

标签: php json

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

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

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

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

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

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

你怎么说,它告诉我正确解码的数组。字符串绝对相同,我甚至保留了转义字符。或者也许他们是问题?

6 个答案:

答案 0 :(得分:25)

看起来您的服务器已启用magic_quotes_gpc。在使用之前disable it$stringJSONstripslashes()

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

答案 1 :(得分:5)

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

需要

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

您错过了结束}

答案 2 :(得分:2)

如果它在echo时显示带有斜杠的字符串,则表示该字符串中包含斜杠。这不是有效的JSON字符串,斜杠不属于那里。如果将该字符串粘贴到PHP中,则斜杠将由PHP计算。 PHP源代码中的字符串文字"\""计算为字符串",因此有效地删除了斜杠,并且您正在解码有效的JSON字符串。

我怀疑你有Magic Quotes将斜杠插入GET值,然后将其关闭。

答案 3 :(得分:1)

这是引用问题:请尝试以下

$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);

答案 4 :(得分:1)

json_encode($str, JSON_UNESCAPED_SLASHES);

它可能对你有所帮助。

答案 5 :(得分:0)

运行json_decode两次。

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

这可能有助于某人。