powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подмножество в JSON
4 сообщений из 4, страница 1 из 1
Подмножество в JSON
    #39965497
Двоичник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ребята, подскажите, пожалуйста

Дали файл, который нужно разобрать и загрузить в БД, но вот не понял, как читать подмножество

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Declare @JSON varchar(max)= '
 { "code" : "AAAA",
                "descript" : "BBBB",
                "roles" : [ 
                    "ddd", 
                    "eee", 
                    "fff", 
                    "ggg"
                ]
            }'

SELECT * FROM OPENJSON (@JSON) 
WITH (
	  code varchar(10) '$.code'
	 ,descript varchar(10) '$.descript'
	 ,roles varchar(10) '$.roles[0]'
	 )



Так я получаю:
Код: plaintext
AAAA | BBBB | ddd

Но если я изменю указатель на элемент массива
Код: sql
1.
'roles varchar(10) '$.roles[2]


то я получу:
Код: plaintext
AAAA | BBBB | fff

Но почему я должен что-то менять в скрипте? Да и вообще как работают эти подмножества?
Спасибо за подсказки и помощь
...
Рейтинг: 0 / 0
Подмножество в JSON
    #39965513
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник,

как вы себе представляете получить в одну колонку массив?

AAAA BBBB dddeeefffggg?
сервер не умеет объединять значения по своему разумению, если ему специально не сказать как
...
Рейтинг: 0 / 0
Подмножество в JSON
    #39965514
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сервер трактует ваш массив соответственно, как вы можете видеть
Код: sql
1.
SELECT * FROM OPENJSON (@JSON, '$.roles')  



Если очень хочется в одно значение слепить весь массив (хотя это и странное желание)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
with tr as
(
	select t1.[key], cast(t1.[value] as nvarchar) as v from OPENJSON (@JSON, '$.roles') as t1  where t1.[key] = 0
	union all
	select t1.[key], cast(t1.[value]+tr.[v] as nvarchar) as v from OPENJSON (@JSON, '$.roles') as t1 
    join tr on t1.[key] = tr.[key]+1 
)
select top(1) * from tr order by [key] DESC
...
Рейтинг: 0 / 0
Подмножество в JSON
    #39965527
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двоичник
Но почему я должен что-то менять в скрипте? Да и вообще как работают эти подмножества?
Подмножества работают так же, как множества. Вас же не удивляет, что вы указываете $.code, что бы получить элемент code? Вот и для элементов множества roles тоже нужно что то указать

Либо конкретный элемент по номеру, либо весь массив (не знаю, что вам надо получить):
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Declare @JSON varchar(max)= '
 { "code" : "AAAA",
                "descript" : "BBBB",
                "roles" : [ 
                    "ddd", 
                    "eee", 
                    "fff", 
                    "ggg"
                ]
            }'

SELECT * FROM OPENJSON (@JSON) 
WITH (
	  code varchar(10) '$.code'
	 ,descript varchar(10) '$.descript'
	 ,[roles0] nvarchar(max) '$.roles[0]'
	 ,[roles1] nvarchar(max) '$.roles[1]'
	 ,[roles] nvarchar(max) as json
	 )
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подмножество в JSON
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]