繁体   English   中英

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

[英]decode json format data sent via 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={"uid":"guest|10001441"}

但我不确定这是否合适。

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

您可以使用base64_encode()对url参数进行编码

$json=base64_encode('{"uid":"guest|10001441"}');

网址看起来像这样

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

您网址中的JSON无效。 PHP的json_decode在uid周围寻找双引号,并且它的值很大。

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

?uid=value

然后你可以做类似的事情

$data = json_encode( $_GET );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM