Возвращение базового массива JSON-строк в SQL Server - PullRequest
0 голосов
/ 08 июня 2018

Мне нужно создать базовый строковый массив из результатов, возвращаемых в формате JSON из SQL Server.

Пример строки JSON, которую я хотел бы получить:

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

Это "previousSurnames "Я хочу получить как JSON, но без каких-либо предшествующих меток ... просто список строк.

Когда я пытаюсь обычным способом, он всегда помещает поле БД в качестве идентификатора (вместе с некоторыми дополнительными вьющимисяфигурные скобки, которые я тоже не хочу!) ...

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

SQL Server должен быть в состоянии сделать это, поскольку он распознает простой строковый массив как правильную строку JSON, например

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

возвращает 1 (Действительный)

Помогите пожалуйста ...

1 Ответ

0 голосов
/ 08 июня 2018

Я думаю, что вы спрашиваете, что вы хотите получить значение 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)
...