PHP中用json_decode解析JSON后无法获取经纬度的问题求助
解决JSON解析后无法获取经纬度的问题
我帮你搞定这个问题!你之所以拿不到经纬度,是因为解析后的对象里有个数字键名0,PHP里直接用$obj->0这种写法是语法错误,所以得换两种方式来处理:
方法1:将JSON解析为关联数组
使用json_decode的第二个参数true,可以直接把JSON转换成关联数组,这样就能用数组索引轻松访问值了:
$json = '{ "0": { "provider": "gps", "time": 1517235370666, "latitude": 31.501278877258, "longitude": 74.366261959076, "accuracy": 63, "speed": 2.1400001049042, "altitude": 181, "bearing": 28.125, "locationProvider": 0 } }'; // 解析为关联数组 $locationData = json_decode($json, true); // 提取经纬度 $latitude = $locationData['0']['latitude']; $longitude = $locationData['0']['longitude']; // 输出结果 echo "纬度:{$latitude},经度:{$longitude}";
方法2:保留对象类型,用花括号访问数字属性
如果你想继续使用对象类型,只需要用花括号包裹数字键名来访问对应的属性即可:
$json = '{ "0": { "provider": "gps", "time": 1517235370666, "latitude": 31.501278877258, "longitude": 74.366261959076, "accuracy": 63, "speed": 2.1400001049042, "altitude": 181, "bearing": 28.125, "locationProvider": 0 } }'; // 解析为对象(默认行为,可不传第二个参数) $locationObj = json_decode($json); // 用花括号访问数字键名的属性 $gpsData = $locationObj->{'0'}; // 提取经纬度 $latitude = $gpsData->latitude; $longitude = $gpsData->longitude; // 输出结果 echo "纬度:{$latitude},经度:{$longitude}";
简单来说,就是PHP不允许直接用$obj->0这种语法访问数字命名的对象属性,所以要么转成数组,要么用花括号包裹键名来访问就行啦!
内容的提问来源于stack exchange,提问作者M Arfan
相关产品推荐
相关产品推荐

