OPENJSON - 如何从在 SQL 服务器中保存为 NVARCHAR 的 JSON 对象中提取值
OPENJSON - How to extract value from JSON object saved as NVARCHAR in SQL Server
有一个类型为 NVARCHAR
的列 RawData
,其中包含 JSON 对象作为字符串
RawData
-------------------------------------------------------
{"ID":1,--other key/value(s)--,"object":{--object1--}}
{"ID":2,--other key/value(s)--,"object":{--object2--}}
{"ID":3,--other key/value(s)--,"object":{--object3--}}
{"ID":4,--other key/value(s)--,"object":{--object4--}}
{"ID":5,--other key/value(s)--,"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))
像这样
SELECT object
FROM DATA_TB as dt
CROSS APPLY
OPENJSON(dt.RawData) with (object nvarchar(max) as json);
看起来这应该适合你。
示例数据
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" }}');
解决方案
select d.RawData, json_query(d.RawData, '$.object') as Object
from data_tb d;
查看实际效果:fiddle。
有一个类型为 NVARCHAR
的列 RawData
,其中包含 JSON 对象作为字符串
RawData
-------------------------------------------------------
{"ID":1,--other key/value(s)--,"object":{--object1--}}
{"ID":2,--other key/value(s)--,"object":{--object2--}}
{"ID":3,--other key/value(s)--,"object":{--object3--}}
{"ID":4,--other key/value(s)--,"object":{--object4--}}
{"ID":5,--other key/value(s)--,"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))
像这样
SELECT object
FROM DATA_TB as dt
CROSS APPLY
OPENJSON(dt.RawData) with (object nvarchar(max) as json);
看起来这应该适合你。
示例数据
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" }}');
解决方案
select d.RawData, json_query(d.RawData, '$.object') as Object
from data_tb d;
查看实际效果:fiddle。