使用PowerShell批量转换JSON为Leaflet标记代码需求
嘿,这个批量生成Leaflet标记代码的需求完全可以用PowerShell搞定,我给你写个实用的脚本,一步到位解决手动逐个编写的麻烦!
用PowerShell批量将JSON地点数据转为Leaflet标记代码
首先咱们先明确目标:把每个独立JSON文件里的地点信息(忽略coords字段)转换成Leaflet可直接复用的marker代码,批量处理后直接复制到HTML里就能用。
假设你的JSON文件结构是这样的(可根据实际字段调整)
{ "name": "城市中央公园", "description": "占地500亩,拥有湖泊和健身步道", "category": "休闲场所", "coords": [116.403, 39.915] }
PowerShell批量转换脚本
# 设置核心参数:JSON文件所在目录,以及输出JS代码的文件路径 $jsonDir = "C:\Your\Json\Files\Folder" $outputJsPath = "C:\Your\Output\leaflet-markers.js" # 初始化数组存储生成的标记代码 $markerCodes = @() # 遍历目录下所有.json文件 Get-ChildItem -Path $jsonDir -Filter "*.json" | ForEach-Object { # 读取并解析当前JSON文件内容 $placeData = Get-Content $_.FullName -Raw | ConvertFrom-Json # 提取需要的字段(如果你的JSON字段名不同,这里要对应修改) $name = $placeData.name # 转义双引号,避免JS语法错误 $description = $placeData.description -replace "`"", "\`"" $category = $placeData.category -replace "`"", "\`"" # 生成Leaflet标记代码,坐标部分留注释方便手动补充 $markerCode = @" L.marker([/* 手动补充坐标:纬度, 经度 */]) .bindPopup(`"<h3>$name</h3><p>$description</p><span class='category-tag'>$category</span>`") .addTo(map); "@ # 将当前地点的标记代码加入数组 $markerCodes += $markerCode } # 将所有生成的代码写入输出文件,也可以直接输出到控制台复制(取消下面注释即可) $markerCodes | Out-File -Path $outputJsPath -Encoding utf8 # Write-Host ($markerCodes -join "`n`n")
脚本使用说明
- 修改路径:把
$jsonDir改成你存放JSON文件的文件夹路径,$outputJsPath改成你想保存生成JS代码的文件路径。 - 适配字段:如果你的JSON里的字段名(比如不是
name而是title),记得修改脚本里提取字段的对应部分。 - 特殊字符处理:脚本已经处理了双引号的转义,如果你的描述里有其他特殊字符(比如反引号),可以额外添加
-replace "``", "\``"这类处理规则。 - 运行脚本:打开PowerShell,切换到脚本所在目录,或者直接用全路径运行脚本,之后打开输出的JS文件,就能看到所有批量生成的标记代码了。
生成的代码示例
L.marker([/* 手动补充坐标:纬度, 经度 */]) .bindPopup(`<h3>城市中央公园</h3><p>占地500亩,拥有湖泊和健身步道</p><span class='category-tag'>休闲场所</span>`) .addTo(map); L.marker([/* 手动补充坐标:纬度, 经度 */]) .bindPopup(`<h3>老城商业街</h3><p>百年历史的商业街,汇聚特色小吃</p><span class='category-tag'>购物场所</span>`) .addTo(map);
你只需要把这些代码复制到你的HTML文件里(确保在map对象初始化之后的位置),然后手动补充每个标记的坐标就行,完全不用逐个手写!
内容的提问来源于stack exchange,提问作者Jilreign
相关产品推荐
相关产品推荐

