处理 PHP 中 FQL 返回的大用户 ID

2022-08-30 20:19:26

我正在使用FQL从Facebook检索用户列表。为了保持一致性,我得到的结果为JSON。这会导致一个问题 - 由于返回的JSON将用户ID编码为数字,json_decode()将这些数字转换为浮点值,因为有些太大而无法放入int;当然,我需要这些ID作为字符串。

由于json_decode()在不接受任何行为标志的情况下做自己的事情,我不知所措。关于如何解决这个问题的任何建议?


答案 1

json_decode() 可以将大整数转换为字符串,如果在函数调用中指定了标志:

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)

答案 2

我已经通过将&format=json-strings添加到我的FQL api调用中解决了这个问题,如下所示:

$myQuery = "SELECT uid2 FROM friend WHERE uid1=me()";
$facebook->api("/fql?q=" . urlencode($myQuery) . "&format=json-strings")

这告诉Facebook将所有数字都括在引号中,这导致json_decode既不使用int-s也不使用浮点数。

因为我担心这个问题不仅限于FQL,而是所有选择将某些ID表示为BIG-INT的图形API调用,我甚至修补了Facebook的PHP SDK,以迫使Facebook将其所有数字作为字符串返回。

我已将这一行添加到函数中。这将是facebook_base.php版本 3.1.1 中的第 738 行_graph

$params['format'] = 'json-strings';

确定修复


推荐