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
相关产品推荐
相关产品推荐

