Как правильно распаковать массив JSON в SQL Server - PullRequest
1 голос
/ 28 июня 2019

Я делаю набег в JSON, я хотел бы добавить пользователя в несколько групп: вставить массив JSON в таблицу.

В идеале JSON должен выглядеть следующим образом:

'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": [{"0", "1", "5"}]
"Better_Groups": [{"ID":"0", "ID":"1", "ID":"5"}]
}' 

В настоящее время я могу сделать это с помощью JSON следующим образом:

'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Groups": "1,2,3,4"
}' 

затем "распакуйте" его с помощью следующей строчки:

declare @groups varchar(1000)

select @groups = Groups from openjson(@json)
                WITH
        (

        Groups nvarchar(100)        '$.Groups'
        )

        print @groups

select value from string_split(@groups, ',')

, который возвращает симпатичный столик примерно так:

Value
1
2
3
4

Проблема Это плохой JSON, и веб-разработчик будет смеяться надо мной.

Вопрос Как правильно распаковать массив JSON в SQL Server?

Обновление:

Последний использованный JSON выглядит так:

    @json =
            '{
            "Email": "WMogh@starfleet.gov",
            "Prefix":null,
            "FirstName": "Worf",
            "MiddleInitial": "",
            "LastName": "Mogh",
            "Suffix": "Son Of",
            "Title" :"Commander",
            "Groups": "1,2,3,4",
            "Better_Groups": ["0", "1", "5"]
            }' 

1 Ответ

1 голос
/ 28 июня 2019

Предполагается, что элемент groups является массивом:

DECLARE @json NVARCHAR(MAX) = 
N'{
"Email": "WMogh@starfleet.gov",
"Prefix":null,
"FirstName": "Worf",
"MiddleInitial": "",
"LastName": "Mogh",
"Suffix": "Son Of",
"Title" :"Commander",
"Better_Groups": ["0", "1", "5"]
}';

SELECT s.value
FROM OPENJSON(JSON_QUERY(@json, '$.Better_Groups')) s;

db <> fiddle demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...