如果 SQL 中的列相同,如何使用 OPENJSON?
How to use OPENJSON if column is same in SQL?
我的数据库 table 创建为:
declare @library table (dependencies varchar(max))
insert into @library values('{"jar":"azure.com","maven":"azure.com","maven":"azure.com","maven":"azurebook.com"}')
我正在尝试让 JSON 成为
{
"libraries":[
{
"jar" : { "coordinates":"azure.com"}
},
{
"maven" : {"coordinates":"azure.com" }
},
{
"maven" : {"coordinates":"azurebook.com" }
}
]
}
我的 SQL 代码看起来像
SELECT
(
select
j.jar as [jar.coordinates],
j.maven as [maven.coordinates]
FROM OPENJSON(l.dependencies)
WITH (
jar varchar(100),
maven varchar(100)
) j
FOR JSON PATH
) as libraries
FROM @library l
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
我的输出与期望的不一样json
{
"libraries":[
{
"jar" : { "coordinates":"azure.com"}
},
{
"maven" : {"coordinates":"azure.com" }
}
]
}
在我的输出中,我的其他 属性 或列 maven 不包括。
有人可以帮我吗?
谢谢
您不能使用带有架构的 OPENJSON
来执行此操作,因为 JSON 通常只需要唯一的 属性 名称。您可以在没有架构的情况下使用 OPENJSON
,但您也不能使用 FOR JSON
来创建这样的 JSON 值。你还需要 STRING_AGG
SELECT
JSON_QUERY((
SELECT
'[' + STRING_AGG(
'{"' +
STRING_ESCAPE(j.[key], 'json') +
'":"' +
STRING_ESCAPE(j.value, 'json') +
'"}',
','
) + ']'
FROM OPENJSON(l.dependencies) j
)) as libraries
FROM @library l
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
我的数据库 table 创建为:
declare @library table (dependencies varchar(max))
insert into @library values('{"jar":"azure.com","maven":"azure.com","maven":"azure.com","maven":"azurebook.com"}')
我正在尝试让 JSON 成为
{
"libraries":[
{
"jar" : { "coordinates":"azure.com"}
},
{
"maven" : {"coordinates":"azure.com" }
},
{
"maven" : {"coordinates":"azurebook.com" }
}
]
}
我的 SQL 代码看起来像
SELECT
(
select
j.jar as [jar.coordinates],
j.maven as [maven.coordinates]
FROM OPENJSON(l.dependencies)
WITH (
jar varchar(100),
maven varchar(100)
) j
FOR JSON PATH
) as libraries
FROM @library l
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;
我的输出与期望的不一样json
{
"libraries":[
{
"jar" : { "coordinates":"azure.com"}
},
{
"maven" : {"coordinates":"azure.com" }
}
]
}
在我的输出中,我的其他 属性 或列 maven 不包括。 有人可以帮我吗?
谢谢
您不能使用带有架构的 OPENJSON
来执行此操作,因为 JSON 通常只需要唯一的 属性 名称。您可以在没有架构的情况下使用 OPENJSON
,但您也不能使用 FOR JSON
来创建这样的 JSON 值。你还需要 STRING_AGG
SELECT
JSON_QUERY((
SELECT
'[' + STRING_AGG(
'{"' +
STRING_ESCAPE(j.[key], 'json') +
'":"' +
STRING_ESCAPE(j.value, 'json') +
'"}',
','
) + ']'
FROM OPENJSON(l.dependencies) j
)) as libraries
FROM @library l
FOR JSON PATH, WITHOUT_ARRAY_WRAPPER;