SQL JSON-将多行连接到单个JSON字符串中

时间:2018-11-23 16:57:26

标签: sql json azure-sql-database

我正在尝试使用FOR JSON功能通过SQL查询创建以下JSON。

"lineStrings": [
"[[[-0.340254,51.605946],[-0.340278,51.605685],[-0.339718,51.604400], 
[-0.339280,51.603746],[-0.338915,51.603454],[-0.338657,51.603018]]]

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

更新

请尝试此操作/让我知道您是否要这样做。 Example

declare @myTable table (a decimal(12,8), b decimal(12,8))
insert @myTable (a, b)
values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)

select string_agg(c,',') as lineStrings
from
(
    select 1 ignore, JSON_MODIFY(JSON_MODIFY('[]', 'append $', a), 'append $', b) 
    from @myTable
) x(ignore, c)
group by ignore
for json path, without_array_wrapper

ps。 docs中有一些有用的示例,用于解决一些常见问题。


原始尝试

这是一个骇人的解决方案,它使用标准的for json auto输出,然后使用replace函数处理结果字符串。由于您只使用数字,因此很安全,但是如果您有任何文本字段,我也不会冒险。

可能有更好的方法,但是我不确定那是什么...

select replace(replace(replace(replace(jsonString,'"a":',''),'"b":',''),'{','['),'}',']') hackedJson
, jsonString returnedJson
from
(
    select *
    from 
    (
        values (-0.340254,51.605946),(-0.340278,51.605685),(-0.339718,51.604400),(-0.339280,51.603746),(-0.338915,51.603454),(-0.338657,51.603018)
    ) myTable (a, b)
    FOR JSON AUTO
) j( jsonString)