PHP生成JSON数组需在逗号后加空格以适配Google Maps标记
解决JSON数组逗号后自动添加空格的问题
方案1:使用json_encode的格式化参数
PHP的json_encode函数提供JSON_PRETTY_PRINT常量,可直接生成带缩进和空格的格式化JSON,自动在逗号后添加空格,完全满足需求:
<?php $sql5 = "SELECT * FROM Building"; $result5 = $connect->query($sql5); $emparray = array(); while($row5 = $result5->fetch(PDO::FETCH_ASSOC)) { $coordLat = floatval($row5['Building_lat']); $coordLng = floatval($row5['Building_lng']); $emparray[] = array( $row5['Building_name'] , $coordLat , $coordLng , $row5['Building_period'] ); } // 加入JSON_PRETTY_PRINT参数生成带空格的格式化JSON $jsonstring= json_encode($emparray, JSON_PRETTY_PRINT); ?>
生成的JSON示例:
[ [ "Hotel Montgomery", 50.850000000000001, 4.339999999999999, "June" ] ]
输出到JavaScript后,逗号后自带空格,无需手动修改。
方案2:字符串替换(适用于不需要换行的场景)
如果只需要逗号后加空格、不需要换行格式,可以用正则替换json_encode的结果,确保只替换JSON结构中的逗号(不影响字符串内的逗号):
$jsonstring= json_encode($emparray); // 替换非引号包裹的逗号,添加空格 $jsonstring = preg_replace('/(?<!")(,)(?!")/', ', ', $jsonstring);
额外提示:检查JavaScript索引错误
标准JSON语法中,逗号后有无空格不影响JavaScript解析,你遇到的问题大概率是addMarker函数的索引错误:你的数组结构是[名称, 纬度, 经度, 周期],但原代码中索引使用完全错位,修正后的函数如下:
function addMarker(marker) { var category = marker[3]; // 对应Building_period var title = marker[0]; // 对应Building_name var pos = new google.maps.LatLng(marker[1], marker[2]); // 纬度是marker[1],经度是marker[2] var content = marker[0]; marker1 = new google.maps.Marker({ title: title, position: pos, category: category, map: map }); gmarkers1.push(marker1); google.maps.event.addListener(marker1, 'click', (function (marker1, content) { return function () { console.log('Gmarker 1 gets pushed'); infowindow.setContent(content); infowindow.open(map, marker1); map.panTo(this.getPosition()); map.setZoom(15); } })(marker1, content)); }
内容的提问来源于stack exchange,提问作者Laurent Jacobs
相关产品推荐
相关产品推荐

