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


decode json format data sent via url

考虑以下url

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。我做错了什么??我需要以不同的格式传递数据吗??

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

您可以使用urlencode()对JSON字符串进行编码,也可以忽略极端情况,手动添加双引号以使JSON字符串有效,希望这能有所帮助:D

您传递的数据不是有效的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

如果你这样传递它,它就会工作:?json={"uid":"guest|10001441"}

但我不确定这是否是一个合适的方法。

URL中的JSON无效。PHP的json_decode在uid及其值周围查找双引号。

EDIT:与其将数据存储在URL中作为json,不如将数据存储为键值对(如)

?uid=value

然后你可以做一些类似的事情

$data = json_encode( $_GET );

您可以使用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);
}