我可以使用FOR JSON添加嵌套的根节点吗?

时间:2018-12-21 14:11:20

标签: json sql-server

我知道如何使Json脱离SQL Server,包括根节点。

SELECT 'bar' AS [foo]
FOR JSON PATH, ROOT('items');

收益

{
    "items": [
        {"foo": "bar"}
    ]
}

但是我希望另一个根节点包装items,因为我必须遵循一种有效地具有嵌套根节点的规定格式。

{
    "baz": {
        "items": [
            {"foo": "bar"}
        ]
    }
}

我该如何实现?是使用子选择的唯一方法吗?

使用

SELECT
  (
    SELECT 'bar' AS [foo]
    FOR JSON PATH, ROOT ('items')
  ) AS [baz]
FOR JSON PATH;

收益

[
  {
    "baz": {
      "items": [
        {"foo": "bar"}
      ]
    }
  }
]

在此之后,我可以去除外侧的括号。

还有另一种更容易实现这一目标的方法吗?

1 个答案:

答案 0 :(得分:1)

比您容易。使用WITHOUT_ARRAY_WRAPPER时,无需去除外部括号:

SELECT
  (
    SELECT 'bar' AS [foo]
    FOR JSON PATH, ROOT ('items')
  ) AS [baz]
FOR JSON PATH,WITHOUT_ARRAY_WRAPPER;