如何让SQL Server生成适配JavaScript的ROOT格式JSON?
解决SQL Server生成符合JavaScript需求的JSON格式问题
你遇到的问题是因为FOR JSON AUTO, ROOT('markers')会生成一个包含markers属性的外层JSON对象,但JavaScript需要的是直接将数组赋值给变量的语句。这里有两种简单的解决方法:
方法1:拼接变量赋值前缀
去掉ROOT参数让SQL直接返回纯数组,再手动拼接markers = 前缀:
SELECT 'markers = ' + ( SELECT a.Latitude Lat, a.Longitude Long FROM Duurzamekaart.dbo.Poi a FOR JSON AUTO )
执行后会直接生成你需要的格式:
markers = [ { "Lat":3.300000, "Long":3.400000 }, { "Lat":4.400000, "Long":4.500000 } ]
方法2:使用CONCAT函数(更严谨的字符串拼接)
如果需要处理空数组等边界情况,用CONCAT函数更稳妥:
SELECT CONCAT('markers = ', ( SELECT a.Latitude Lat, a.Longitude Long FROM Duurzamekaart.dbo.Poi a FOR JSON AUTO ))
原理说明
- 当你使用
ROOT('markers')时,SQL Server会将数组包裹在一个{ "markers": [...] }的对象中,这符合标准JSON格式,但不符合你需要的JavaScript变量赋值语法。 - 去掉
ROOT参数后,FOR JSON AUTO会直接返回数组形式的JSON字符串,再拼接变量赋值前缀就完美匹配JavaScript的需求了。
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

