问题描述
有RawData
类型的列NVARCHAR
,其中包含JSON对象作为字符串
RawData
-------------------------------------------------------
{"ID":1,--other key/value(s)--,"object":{--object1--}}
{"ID":2,"object":{--object2--}}
{"ID":3,"object":{--object3--}}
{"ID":4,"object":{--object4--}}
{"ID":5,"object":{--object5--}}
此JSON字符串很大(1kb),当前此json中最常用的部分是object
(200字节)。
我想使用OPEnjsON
提取这些json字符串的对象部分。我无法实现解决方案,但我认为有解决方案。
我想要的结果是:
RawData
----------------
{--object1--}
{--object2--}
{--object3--}
{--object4--}
{--object5--}
到目前为止我的尝试
SELECT *
FROM OPEnjsON((SELECT RawData From DATA_TB FOR JSON PATH))
解决方法
看起来像这样对您有用。
样本数据
obj.Add("connection.provider","Project.connection.AzureSQLDatabase");
解决方案
create table data_tb
(
RawData nvarchar(max)
);
insert into data_tb (RawData) values
('{"ID":1,"key": "value1","object":{ "name": "alfred" }}'),('{"ID":2,"key": "value2","object":{ "name": "bert" }}'),('{"ID":3,"key": "value3","object":{ "name": "cecil" }}'),('{"ID":4,"key": "value4","object":{ "name": "dominique" }}'),('{"ID":5,"key": "value5","object":{ "name": "elise" }}');
查看实际情况:fiddle。
,类似这样的东西
SELECT object
FROM DATA_TB as dt
CROSS APPLY
OPENJSON(dt.RawData) with (object nvarchar(max) as json);