我正在使用FQL从Facebook检索用户列表.为了保持一致性,我将结果作为JSON.这会导致问题 - 因为返回的JSON将用户ID编码为数字,json_decode()会将这些数字转换为浮点值,因为有些数字太大而无法放入int中; 当然,我需要这些ID作为字符串.
由于json_decode()在没有接受任何行为标志的情况下做了自己的事情,所以我很茫然.有关如何解决此问题的任何建议?
如PHP文档中所述,当json_decode包含长整数的数据结构时,它们将被转换为浮点数.解决方法是使用JSON_BIGINT_AS_STRING,它将它们保留为字符串.当json_encode输入这些值时,JSON_NUMERIC_CHECK会将这些数字编码回大整数:
$json = '{"foo":283675428357628352}';
$obj = json_decode($json, false, JSON_BIGINT_AS_STRING);
$json2 = json_encode($obj, JSON_NUMERIC_CHECK);
var_dump($json === $json2); // true
Run Code Online (Sandbox Code Playgroud)
使用此方法进行正确的数据往返很容易出错.如果属性包含'123'一个应该保留字符串的数字字符串,它将被编码为整数.
我想从服务器获取一个对象,修改一个属性,然后将整个数据结构放回去.我需要保留原始类型.我不想维护我正在操纵的属性.
这有什么真正的解决方法吗?PHP不再存在大的问题,但json_decode例程似乎已经过时了.