今天在获取淘宝客佣金记录时候,淘宝返回给我的json格式的数据。
数据如下
{"taobaoke_report_get_response":{"taobaoke_report":{"taobaoke_report_members":{"taobaoke_report_member":[{"app_key":"21077206","commission":"0.36","commission_rate":"0.02","num_iid":13786550129,"pay_price":"36.0","pay_time":"2012-12-08
13:20:17","seller_nick":"鐗╃編鐢熸椿瀹跺眳","trade_id":178176378083235}]},"total_results":1}}}
我用json_decode转换类型后
object(stdClass)#19 (1) { ["taobaoke_report_get_response"]=>
object(stdClass)#20 (1) { ["taobaoke_report"]=> object(stdClass)#21 (2) {
["taobaoke_report_members"]=> object(stdClass)#22 (1) {
["taobaoke_report_member"]=> array(1) { [0]=> object(stdClass)#23 (8) {
["app_key"]=> string(8) "21077206" ["commission"]=> string(4) "0.36"
["commission_rate"]=> string(4) "0.02" ["num_iid"]=> float(13786550129)
["pay_price"]=> string(4) "36.0" ["pay_time"]=> string(19) "2012-12-08
13:20:17" ["seller_nick"]=> string(18) "鐗╃編鐢熸椿瀹跺眳" ["trade_id"]=>
float(1.7817637808324E+14) } } } ["total_results"]=> int(1) } } }
发现了一个问题我的trade_id id由原来的值178176378083235 变成了现在的1.7817637808324E+14
这是由PHP整数值范围决定的,而这个范围依赖于操作系统。在32位操作系统中,PHP的整数最大值是2147483647,你可以通过输出PHP_INT_MAX看到。
我 的是php5.3以后的版本,所以json_decode自动给我由int转换成了float。由于 我的值 较大,转换后的值 也不是我要的值 。
怎么办呢?
我想到的 办法主是把 用字符串替换,把我获取的json格式的字符串中的trade_id 加上双引号就变成了字符串这样就没问题了。
$data = {"taobaoke_report_get_response":{"taobaoke_report":{"taobaoke_report_members":{"taobaoke_report_member":[{"app_key":"21077206","commission":"0.36","commission_rate":"0.02","num_iid":13786550129,"pay_price":"36.0","pay_time":"2012-12-08
13:20:17","seller_nick":"鐗╃編鐢熸椿瀹跺眳","trade_id":178176378083235}]},"total_results":1}}}
$data=preg_replace('/("trade_id":)(\d{6,})/i', '${1}"${2}"', $data);
输出$data得
{"taobaoke_report_get_response":{"taobaoke_report":{"taobaoke_report_members":{"taobaoke_report_member":[{"app_key":"21077206","commission":"0.36","commission_rate":"0.02","num_iid":13786550129,"pay_price":"36.0","pay_time":"2012-12-08
13:20:17","seller_nick":"鐗╃編鐢熸椿瀹跺眳","trade_id":"178176378083235"}]},"total_results":1}}}"
现在trade_id的值 加了双引号变成字符串了"178176378083235"
把得到的json格式的$data
json_decode($data)后输出 值 如下
object(stdClass)#19 (1) { ["taobaoke_report_get_response"]=>
object(stdClass)#20 (1) { ["taobaoke_report"]=> object(stdClass)#21 (2) {
["taobaoke_report_members"]=> object(stdClass)#22 (1) {
["taobaoke_report_member"]=> array(1) { [0]=> object(stdClass)#23 (8) {
["app_key"]=> string(8) "21077206" ["commission"]=> string(4) "0.36"
["commission_rate"]=> string(4) "0.02" ["num_iid"]=> float(13786550129)
["pay_price"]=> string(4) "36.0" ["pay_time"]=> string(19) "2012-12-08
13:20:17" ["seller_nick"]=> string(18) "鐗╃編鐢熸椿瀹跺眳" ["trade_id"]=>
string(15) "178176378083235" } } } ["total_results"]=> int(1) } } }
请看trade_id值 正常了吧!
浙公网安备 33010602011771号