$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);
你怎么说,它告诉我正确解码的数组。字符串绝对相同,我甚至保留了转义字符。或者也许他们是问题?
答案 0 :(得分:25)
看起来您的服务器已启用magic_quotes_gpc
。在使用之前disable it或$stringJSON
到stripslashes()
。
$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);
这可能有助于某人。