首页 > 解决方案 > 试图找出 OPENJSON 查询的语法并卡住了

问题描述

我一直在努力从我试图加载到某些表中的 JSON 消息中提取数据。我可以让这个在它上面有一个名称/值对的消息工作,但另一条消息有第二个外部名称/值对。

DECLARE @json nvarchar(max) =
'{
"request":
    {
    "requestId" : "3a282d32-4ed4-48e8-a6c0-23cf4921737e",
    "modelType" : "NEW"
    }
}'

select 'request' as title, request.requestId , request.modelType
from openjson(@json)
with
(
   request nvarchar(max) as json 
)
as Projects
cross apply openjson (Projects.request)
with
(
    requestId nvarchar(50),
    modelType nvarchar(50)
)  as request

这将按预期返回行,但是如果上面有额外的名称/值对,我该如何编写查询?像这样:

DECLARE @json nvarchar(max) =
'{
  "request": {
            "request":
                    {
                    "requestId" : "3a282d32-4ed4-48e8-a6c0-23cf4921737e",
                    "modelType" : "NEW"
                    }
            }   
}'

任何人都可以帮忙。我知道这可能真的很简单,但我似乎无法理解如何去做。我是我公司中唯一使用 JSON 的人,或者我会直接问他们。

先感谢您!

标签: sqljsonopen-json

解决方案


还需要一个cross apply来达到目标​​。

select 'request' as title, request.requestId , request.modelType
from openjson(@json)
with
(
   request nvarchar(max) as json 
)
as Projects
cross apply openjson (Projects.request)
with
(
    request nvarchar(max) as json 
)  as subrequest
cross apply openjson (subrequest.request)
with
(
    requestId nvarchar(50),
    modelType nvarchar(50)
)  as request

db<>fiddle中的演示


推荐阅读