我创建了请求FB进行实时更新的服务。 Facebook返回的结果是JSON类型。它是这样的:
{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}
然后我想保留此JSON中的所有数据以存储在数据库中。我的问题在
"sender_id":1490984774509544,
哪个是发件人ID(没有双qoutes的数字)。然后当我将这个sender_id放在var中时,它会自动将其转换为float。我的PHP代码:
$sender_id = strval($json_array['entry'][0]['changes'][0]['value']['sender_id']);
echo nl2br("The Sender ID = $sender_id \n");
我对sender_id的结果将如下所示:
The Sender ID = 1.4909847745095E+15
我不希望发件人ID更改为浮动,但保留为应该显示的字符串:
The Sender ID = 1490984774509544
请帮助。提前谢谢。
答案 0 :(得分:1)
$var = json_decode('{"object":"page","entry":[{"id":"248874468652581","time":1428654497,"changes":[{"field":"feed","value":{"item":"comment","verb":"add","comment_id":"248878481985513_367520770121283","parent_id":"248874468652581_248878498652178","sender_id":1490984774509544,"created_time":1428654497,"sender_name":"Orlig Anbiz","message":"helo"}}]}]}',true,512,JSON_BIGINT_AS_STRING);
var_dump((($var['entry'][0]['changes'][0]['value']['sender_id'])));
结果:
string '1490984774509544' (length=16)
答案 1 :(得分:0)
如果您不希望数据库将您的值解释为数字,请不要将其另存为数字。
您需要将其存储为非数字字符串数据类型,例如varchar
,或者如果它太长,则text
符合您的帐单。
在这种情况下,
您似乎正在为列使用float
数据类型,只需登录phpmyadmin,并将该列的数据类型更改为上述类型之一。
更新: -
您可以使用"输入"更改变量数据类型。 在你的代码中......
$sender_id = (string) $json_array['entry'][0]['changes'][0]['value']['sender_id'];
答案 2 :(得分:0)
docs中所述json_decode
的默认行为是:
选项:JSON解码选项的位掩码。目前只支持JSON_BIGINT_AS_STRING(默认是将大整数转换为浮点数)
因此,您需要将JSON_BIGINT_AS_STRING
添加为$option
参数:
json_decode ( $json, $assoc = true, $depth = 512, $options = JSON_BIGINT_AS_STRING )
这样,您将保留json_decode
不会将大整数转换为浮点数。
所以在你的情况下,你不应该改变$json_array
,而是改变你的方式。你应该这样做:
$json_array = json_decode($jsonYouGotFromFacebook, true, 512, JSON_BIGINT_AS_STRING);
你的$json_array
应该没问题。
希望这有帮助!
答案 3 :(得分:-1)
=>您可以通过为其添加前缀来显式键入所需的变量:
var_dump((string) 125.334);
将返回:
string(8) "125.334"
=>您还可以使用方法settype:
$var = 125.334;
settype($var, 'string');
var_dump($var);
将返回:
string(8) "125.334"
=>最简单的方法当然是第一个:)