SQL Server中如何交换多边形JSON字符串内的lat与lng坐标位置
SQL Server交换点位JSON中lat与lng字段位置的可行方案
以下方案均支持SQL Server 2016及以上版本,其中正则方案需要SQL Server 2017+运行环境。
方案1:原生JSON解析重构(最稳定,推荐使用)
通过SQL Server原生JSON函数解析点位数组,重新构造每个点位的键顺序后再拼接为目标JSON,完全避免格式匹配错误的问题。
DECLARE @InputJson NVARCHAR(MAX) = N'{"points":[{"lat":49.454912346,"lng":-123.1000021159},{"lat":47.454912346,"lng":-122.1000021159},{"lat":55.454912346,"lng":-121.1000021159},{"lat":52.454912346,"lng":-127.1000021159},{"lat":26.454912346,"lng":-129.1000021159}]}' -- 解析并重构JSON SELECT ( SELECT lng, lat FROM OPENJSON(JSON_QUERY(@InputJson, '$.points')) WITH ( lat FLOAT '$.lat', lng FLOAT '$.lng' ) FOR JSON PATH, ROOT('points') ) AS OutputJson
方案2:正则快速替换(适合格式固定的批量场景)
如果你的所有JSON文本格式高度统一,点位字段顺序固定为lat在前、lng在后,且中间无多余空格,可以用正则替换快速处理。
DECLARE @InputJson NVARCHAR(MAX) = N'{"points":[{"lat":49.454912346,"lng":-123.1000021159},{"lat":47.454912346,"lng":-122.1000021159},{"lat":55.454912346,"lng":-121.1000021159},{"lat":52.454912346,"lng":-127.1000021159},{"lat":26.454912346,"lng":-129.1000021159}]}' SELECT REGEXP_REPLACE( @InputJson, '"lat":([0-9\.-]+),"lng":([0-9\.-]+)', '"lng":$2,"lat":$1' ) AS OutputJson
注意:如果JSON中lat和lng之间存在空格、或者字段顺序有不一致的情况,该方案可能失效,优先选择方案1。
内容的提问来源于stack exchange,提问作者dye
相关产品推荐
相关产品推荐

