使用FOR JSON子句

时间:2017-04-24 11:51:07

标签: sql-server sql-server-2016

使用PostgreSQL我可以有多行json对象。

select (select ROW_TO_JSON(_) from (select c.name, c.age) as _) as jsonresult from employee as c

这给了我这个结果:

{"age":65,"name":"NAME"}
{"age":21,"name":"SURNAME"}

但是在SqlServer中,当我使用FOR JSON AUTO子句时,它为我提供了一个json对象数组,而不是多行。

select c.name, c.age from customer c FOR JSON AUTO

[{"age":65,"name":"NAME"},{"age":21,"name":"SURNAME"}]

如何在SqlServer中获得相同的结果格式?

2 个答案:

答案 0 :(得分:15)

通过在每一行中构建单独的JSON:

SELECT (SELECT [age], [name] FOR JSON PATH, WITHOUT_ARRAY_WRAPPER)
FROM customer

有一种替代形式不需要你知道表结构(但可能性能更差,因为它可能会生成一个大的中间JSON):

SELECT [value] FROM OPENJSON(
    (SELECT * FROM customer FOR JSON PATH)
)

答案 1 :(得分:1)

没有更好的结构

选择c.id,jdata。* 来自客户c   交叉申请     (SELECT * FROM customer jc where jc.id = c.id FOR JSON PATH,WITHOUT_ARRAY_WRAPPER)jdata(jdata)