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

CodeIgniter中JSON值格式调整求助:插件预设格式不匹配

搞定JSON格式不匹配的问题!

嘿,我看你遇到了生成的JSON和预期格式不符的情况——核心问题是latLng字段的类型不对,还有前端调用的小问题,咱们一步步解决:

问题根源

你需要的latLng是数组类型(比如[-6.17343444,1206.834234294]),但现在生成的是逗号分隔的字符串,这是因为你直接把数据库里的lat_long字符串赋值给了latLng,json_encode自然会把它当成字符串处理。另外前端的JSON请求写法也有问题,得一起调整。

修复方案

1. 修改PHP脚本,把经纬度字符串转成数组

咱们把数据库里的逗号分隔字符串拆成浮点数数组,这样json_encode就能生成你要的格式了:

public function lat_lang() {
    $data = []; // 先初始化数组,避免空数据时出现警告
    foreach($this->model->name_model() as $row){
        // 拆分经纬度字符串,转成浮点数数组
        $latLngParts = explode(',', $row->lat_long);
        $latLngArray = [
            floatval($latLngParts[0]),
            floatval($latLngParts[1])
        ];
        $data[] = [
            'latLng' => $latLngArray,
            'name' => $row->city
        ];
    }
    header('content-type: application/json');
    echo json_encode($data);
}

这里用explode把字符串拆成两部分,再转成浮点数,确保JSON里是数字而不是字符串数字,完美匹配你要的格式。

2. 修正前端的JSON请求代码

你之前的$.parseJSON用法不对,应该用$.getJSON来异步请求接口,而且别忘了加上控制器里的方法名lat_lang:

$.getJSON('<?php echo base_url().'mycontrollers/lat_lang';?>', function(datas) {
    console.log(datas);
});

$.getJSON会自动帮你解析返回的JSON数据,不用手动调用解析函数,而且必须指定完整的接口路径(控制器+方法)才能正确请求到数据。

验证效果

修改后生成的JSON就会和你预期的完全一致了:

[ 
    { "latLng": [-6.17343444,1206.834234294], "name": "XY" }, 
    { "latLng": [-6.1742343244,106.898987294], "name": "XK" } 
]

如果发现name的顺序还是反的,检查一下name_model()返回的city字段数据顺序是否正确就行啦。


内容的提问来源于stack exchange,提问作者irwan dwiyanto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:46:41