【问题标题】:Returning a basic JSON string array in SQL Server返回 SQL Server 中的基本 JSON 字符串数组
【发布时间】:2018-11-18 16:39:26
【问题描述】:

我需要根据结果创建一个基本字符串数组 - 从 SQL Server 以 JSON 格式返回。

我想要的示例 JSON 字符串是:

[
  {
    "person": {
        "name":"Jane Bloggs",
        "previousSurnames": [
            "Bloggy",
            "Jones"
        ],
        "Address":"I Live Here"
  }
]

这是我希望以 JSON 格式检索的“previousSurnames”,但没有任何前面的标签……只是一个字符串列表。

当我尝试传统方式时,它总是将 db 字段作为标识符(以及一些我也不想要的额外花括号!)...

[
  {
    "person": {
        "name":"Jane Bloggs",
        "previousSurnames": [
            {"surname":"Bloggy"},
            {"surname":"Jones"}
        ],
        "Address":"I Live Here"
  }
]

SQL Server 必须能够做到这一点,因为它将简单的字符串数组识别为正确的 JSON 字符串,例如

select isjson('["Bloggy","Jones"]')

返回 1(有效)

请帮忙...

【问题讨论】:

  • 不清楚,你有没有表,你想把它解析为json?或者您正在尝试从 json 字段中获取已定义的对象列表(并将其解析为 json)?
  • 您使用的是什么版本的 SQL Server?
  • SQL Server 2016。抱歉@B3S - 是的,我正在从数据库表中检索详细信息 - 在“person”和“previousNames”之间的 1:n 上。

标签: arrays json sql-server sql-server-2016


【解决方案1】:

我认为您要问的是您希望将 previousSurnames 的值作为 JSON 字符串检索。如果是这种情况,那么其中之一应该可以工作。

对于单项数组,例如在您的示例中:

DECLARE @json NVARCHAR(MAX) = N'[
  {
    "person": {
        "name":"Jane Bloggs",
        "previousSurnames": ["Bloggy","Jones"],
        "Address":"I Live Here"
    }
  }
]';

SELECT JSON_QUERY(@json, '$[0].person.previousSurnames')

或者,如果您的源 JSON 在数组中有多个项目,这应该可以工作:

DECLARE @json NVARCHAR(MAX) = N'[
  {
    "person": {
        "name":"Jane Bloggs",
        "previousSurnames": ["Bloggy","Jones"],
        "Address":"I Live Here"
    }
  },
  {
    "person": {
        "name":"Jane Bloggs 2",
        "previousSurnames": ["Bloggy2","Jones2"],
        "Address":"I Live Here"
    }
  }
]';
SELECT JSON_QUERY(value, '$.person.previousSurnames')
FROM OPENJSON(@json)

【讨论】:

    猜你喜欢
    • 2022-12-02
    • 2021-10-16
    • 2012-09-16
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多