解码通过url发送的json格式数据

时间:2013-07-30 12:09:03

标签: php json

考虑以下网址

index.php?json={uid:guest|10001441}

我无法解码数据。  我需要输出为{"uid":"guest|10001441"}

我使用的代码是

if (isset($_GET['json']))
{
   $url_data = $_GET['json'];
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}

但是它输出为NULL。我究竟做错了什么??我需要以不同的格式传递数据吗?

5 个答案:

答案 0 :(得分:2)

似乎不可能在没有双引号的情况下解码JSON字符串,因为很难确定JSON字符串"{A:B:C}"是来自{"A":"B:C"}还是来自{"A:B":"C"}

您可以使用urlencode()对JSON字符串进行编码,或者只是忽略极端情况并手动添加双引号以使JSON字符串有效,希望此帮助:D

答案 1 :(得分:1)

如果您这样传递它,它将起作用:?json={"uid":"guest|10001441"}

但我不确定这是否是一种正确的方法。

答案 2 :(得分:1)

您传递的数据不是有效的JSON。目前它周围没有双引号。试试这个:

if (isset($_GET['json']))
{
   $url_data = '"'.$_GET['json'].'"';
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}

<强>输出:

string(20) "{uid:guest|10001441}"

此外,我建议在此使用POST代替GET

答案 3 :(得分:1)

您可以使用base64_encode()

对url参数进行编码
$json=base64_encode('{"uid":"guest|10001441"}');

url看起来像这样

index.php?json=eyJ1aWQiOiJndWVzdHwxMDAwMTQ0MSJ9

然后这样做: -

if (isset($_GET['json']))
{
   $url_data = base64_decode($_GET['json']);
   $decoded_data = json_decode($url_data,true);
   var_dump($decoded_data);
}

答案 4 :(得分:0)

您网址中的JSON无效。 PHP的json_decode在uid及其值附近查找双引号。

编辑:不是将数据存储在URL中,因为json不能将数据存储为键值对,例如

?uid=value

然后你可以做类似

的事情
$data = json_encode( $_GET );