Json столбец SQL - PullRequest
       70

Json столбец SQL

1 голос
/ 20 июня 2020

Я использую Microsoft SQL Server Management Studio (для подключения к SQL серверу), и у меня есть таблица с именем mrct_products.BakedProduct с 3 столбцами:

 1. Column1 ProductID
 2. Column2 Status
 3. Column3 TechnicalSpecs

Столбец Column3 содержит таблица, содержащая огромный json с большим количеством значений. Вот пример строки:

[{"Name":"Color","Value":"Red"},{"Name":"Type","Value":"Naturally sweet"}]

Я хочу сделать запрос и попросить Цвет. Вот моя попытка, но цвет возвращается пустым

select ProductId,json_value(TechnicalSpecs, '$.Color') as color
from mrct_products.BakedProduct

Ответы [ 4 ]

0 голосов
/ 22 июня 2020

Что касается вашего вопроса, вы хотите сделать запрос и запросить цвет. Вы можете попробовать следующий код, чтобы получить его.

select ProductID,Status,Name,Value 
from BakedProduct
CROSS APPLY OPENJSON(TechnicalSpecs) WITH(
       Name varchar(50)
     , Value varchar(50)
     ) j
         where j.Name='Color'

Результат:

введите описание изображения здесь

0 голосов
/ 20 июня 2020

Глядя на это, поле JSON выглядит странно ... обычно оно создается как:

{key:value}

В формате

 {String:Any}

Итак, начало вашего поля должно быть:

[{"Color","Red"},{"Type","Naturally sweet"}....

Обратите внимание, что ваш JSON не является неправильным, только более сложный, чем он может быть.

Возвращаясь к вашему вопросу, вы можете использовать OPEN JSON в процедуре :

DECLARE @json NVARCHAR(MAX)
SET @json= youfieldhere
SELECT * FROM OPENJSON(@json);

Если ваше поле для упрощения имеет вид {"Color", "Red"}, {"Type", "Naturally sweet"}, результатом будет новая таблица, например:

Ключ | Значение

Цвет | Красный
Тип | Естественно быстро

(я должен понять, как составлять таблицу в ответах)

0 голосов
/ 20 июня 2020

Причина неожиданных результатов заключается в том, что анализируемый текст представляет собой массив JSON объектов JSON, а не объект JSON с парой ключ / значение $.status. Вам нужен другой оператор, использующий OPENJSON() с явной схемой и оператор APPLY для анализа JSON и фильтрации результатов:

Таблица:

CREATE TABLE BakedProduct (
   ProductID int,
   Status varchar(100),
   TechnicalSpecs varchar(1000)
)
INSERT INTO BakedProduct (ProductID, Status, TechnicalSpecs)
VALUES (1, 'Status', '[{"Name":"Color","Value":"Red"},{"Name":"Type","Value":"Naturally sweet"}]')

Заявление:

SELECT p.ProductId, p.Status, j.[Name], j.[Value]
FROM BakedProduct p
CROSS APPLY OPENJSON(p.TechnicalSpecs) WITH (
   [Name] varchar(100) '$.Name',
   [Value] varchar(100) '$.Value'
) j
WHERE j.[Name] = 'Color'

Результат:

ProductId   Status  Name    Value
1           Status  Color   Red
0 голосов
/ 20 июня 2020

по какой-либо причине он изначально был разработан как json? Насколько я понимаю, «нормально» использовать столбцы db для этих json данных. или вы можете просто создать для этого другую таблицу, их будет легче поддерживать,

Если вам действительно нравится хранить json, я рекомендую хранить его с помощью репозитория на основе документов, например mongodb, и иметь данные mongodb идентификатор из вашего BakedProduct

...