Есть ли решение для разбора JSON в SQL Server 2014 - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь изменить данные, сохраненные в формате json в SQL Server 2014, в таблицу, подобную следующей:

Id  ImageId     FileNamePath
3    1          9/1/image1.png
3    1          9/1/image2.png  

У меня есть следующий JSON (TestImage), сохраненный в сервере SQL Server 2014

Id  ImagingId   TestImage
3   1           [{"Filename":"9/1/image1.png","OriginalName":"image1.png"}, 
                {"Filename":"9/1/image2.png","OriginalName":"image2.png"}]

Я искал в Google, а также в стеке, который идет с этим веб-сайтомserver / Создал функцию parseJSON

DECLARE @jsonInfo NVARCHAR(MAX)
select @jsonInfo=TestImage from rptImagings
Select Id, ImageId,
   max(case when name='Text' then convert(Varchar(50),StringValue) else '' 
end) as [Text],
   max(case when name='Value' then convert(Varchar(50),StringValue) else 
'' end) as [Value],
   max(case when name='Default' then convert(bit,StringValue) else 0 end) 
as [Default]
From parseJSON
(
@jsonInfo
)
where ValueType = 'string' OR ValueType = 'boolean'
group by parent_ID

Я хочу получить результат вывода, подобный следующему

Id  ImageId     FileNamePath
3    1          9/1/image1.png
3    1          9/1/image2.png

1 Ответ

0 голосов
/ 26 апреля 2019

Вот один вариант, который преобразует ваш JSON в XML. Оттуда это маленький вопрос извлечения

Для ясности, это работает с вашими примерами данных, но я подозреваю, что в будущем могут возникнуть проблемы.

Пример

Declare @YourTable Table ([Id] varchar(50),[ImagingId] varchar(50),[TestImage] varchar(1500))  Insert Into @YourTable Values 
 (3,1,'[{"Filename":"AA/9293/9/1/image1.png","OriginalName":"image1.png"},{"Filename":"AA/9293/9/1/image1.png","OriginalName":"image2.png"}]')

 Select A.ID
       ,A.ImagingId 
       ,C.*
From  YourTable A
Cross Apply ( values(try_convert(xml,replace(replace(replace(replace(replace(replace([TestImage],'[',''),']',''), '":"', '="'),'{"', '<x '),'}','></x>' ), '","','" ')) )) B(XMLData)
Cross Apply (
                Select FileNamePath = xAttr.value('.','varchar(max)')
                 From  XMLData.nodes('//@Filename') xNode(xAttr)
            ) C

Возвращает

ID  ImagingId   FileNamePath
3   1           AA/9293/9/1/image1.png
3   1           AA/9293/9/1/image1.png

Обновление dbFiddle

...