gga*_*ett 19 php json facebook facebook-fql
我正在使用FQL从Facebook检索用户列表.为了保持一致性,我将结果作为JSON.这会导致问题 - 因为返回的JSON将用户ID编码为数字,json_decode()会将这些数字转换为浮点值,因为有些数字太大而无法放入int中; 当然,我需要这些ID作为字符串.
由于json_decode()在没有接受任何行为标志的情况下做了自己的事情,所以我很茫然.有关如何解决此问题的任何建议?
Bjö*_*örn 28
如果在函数调用中指定了一个标志,json_decode()可以将大整数转换为字符串:
$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)
Run Code Online (Sandbox Code Playgroud)
小智 20
我通过添加&format=json-strings
到我的FQL api调用解决了这个问题,如下所示:
$myQuery = "SELECT uid2 FROM friend WHERE uid1=me()";
$facebook->api("/fql?q=" . urlencode($myQuery) . "&format=json-strings")
Run Code Online (Sandbox Code Playgroud)
这告诉facebook将所有数字包装在引号中,这导致json_decode既不使用int -s也不使用浮点数.
因为我担心这个问题不仅限于FQL,而是所有图形API调用都选择将一些ID表示为BIG-INTs,我已经修改了facebook的PHP SDK,以迫使Facebook返回其全部数字作为字符串.
我已将这一行添加到该_graph
函数中.
这将是facebook_base.php版本3.1.1中的第738行
$params['format'] = 'json-strings';
Run Code Online (Sandbox Code Playgroud)
当然可以解决
我有一个类似的问题,json_decode
即将最近的推特/推特ID转换为指数数字.
如果你希望你的BIGINT成为一个字符串 - 并且拥有PHP 5.3+,Björn的答案很棒.如果这些都不是真的,另一种选择是提高PHP的浮点精度.这可以通过不同的方式完成......
precision
在php.ini中找到值并将其更改为precision = 20
ini_set('precision', 20);
到您的PHP应用程序php_value precision 20
到您应用的.htaccess或虚拟主机文件快速和肮脏,似乎现在工作:
$sJSON = preg_replace('/:(\d+)/', ':"${1}"', $sJSON);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7309 次 |
最近记录: |