处理 PHP 中 FQL 返回的大用户 ID
2022-08-30 20:19:26
我正在使用FQL从Facebook检索用户列表。为了保持一致性,我得到的结果为JSON。这会导致一个问题 - 由于返回的JSON将用户ID编码为数字,json_decode()将这些数字转换为浮点值,因为有些太大而无法放入int;当然,我需要这些ID作为字符串。
由于json_decode()在不接受任何行为标志的情况下做自己的事情,我不知所措。关于如何解决这个问题的任何建议?
我正在使用FQL从Facebook检索用户列表。为了保持一致性,我得到的结果为JSON。这会导致一个问题 - 由于返回的JSON将用户ID编码为数字,json_decode()将这些数字转换为浮点值,因为有些太大而无法放入int;当然,我需要这些ID作为字符串。
由于json_decode()在不接受任何行为标志的情况下做自己的事情,我不知所措。关于如何解决这个问题的任何建议?
json_decode() 可以将大整数转换为字符串,如果在函数调用中指定了标志:
$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)
我已经通过将&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';
确定修复