You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel5中能否通过JSON解码从JSON字段分离提取经纬度?

当然可以用JSON解码实现,这里有两种实用方案供你选择:

方案一:PHP层面手动解析JSON字符串

你当前拿到的$vehiclelocation[0]['veh_last_location']是标准的JSON格式字符串,直接用PHP的json_decode()函数就能解析成数组,再提取出纬度和经度:

// 先获取JSON格式的字符串
$locationJson = $vehiclelocation[0]['veh_last_location'];
// 解码为关联数组(第二个参数传true,避免返回对象)
$locationData = json_decode($locationJson, true);
// 提取纬度和经度(注意你的JSON是数组包裹的单个对象,所以要取索引0的元素)
$latitude = $locationData[0]['lati'];
$longitude = $locationData[0]['long'];

// 测试输出结果
dd($latitude, $longitude);

方案二:数据库层面直接提取(更高效)

如果你的MySQL版本是5.7及以上,原生支持JSON操作函数,那可以直接在查询阶段就把纬度和经度提取出来,不用再在PHP里处理,性能会更优:

方法A:使用JSON_EXTRACT函数

$location = Vehicle::selectRaw('JSON_EXTRACT(veh_last_location, "$[0].lati") as latitude')
    ->selectRaw('JSON_EXTRACT(veh_last_location, "$[0].long") as longitude')
    ->first();

// 直接获取解析后的字段
dd($location->latitude, $location->longitude);

方法B:使用更简洁的->语法(MySQL 5.7.9+支持)

$location = Vehicle::selectRaw('veh_last_location->"$[0].lati" as latitude')
    ->selectRaw('veh_last_location->"$[0].long" as longitude')
    ->first();

dd($location->latitude, $location->longitude);

额外建议

如果你的veh_last_location字段目前是字符串类型,建议改成MySQL的JSON类型,这样数据库会自动验证格式合法性,后续的JSON操作也会更高效。

内容的提问来源于stack exchange,提问作者Lav Narain Nishad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 05:21:18