我有一个以表格形式返回数据的API:
"cars" : {"VW":{"name":"Volkswagen","country":"Germany"},
"GM":{"name":"General Motors","country":"USA"},
"RR":{"name":"Rolls Royce","country":"UK"}
}
使用JSON_VALUE
,如何引用两个角色指示符" VW"," GM"等?
我可以得到这个名字&国家/地区使用路径$.cars
,但无法查看如何获取(未命名)字段。 API不是我的,所以我无法决定格式。
答案 0 :(得分:1)
此查询将返回什么内容?
set @json = N'
["cars" : {
"VW":{
"name":"Volkswagen",
"country":"Germany"},
"GM":{
"name":"General Motors",
"country":"USA"},
"RR":{
"name":"Rolls Royce",
"country":"UK"}
}]';
select *
from OPENJSON( @json )
请问您能分享输出吗?
我为此作为答案道歉,但是对于评论来说太长了,这个查询可能有助于找到OP想要获取的元素。
修改#1 强>
此:
Declare @js nvarchar(4000) = N'{"cars" : {
"VW":{"name":"Volkswagen","country":"Germany"},
"GM":{"name":"General Motors","country":"USA"},
"RR":{"name":"Rolls Royce","country":"UK"}}}'
SELECT [key]
FROM OPENJSON (@js,'$.cars')
会为您提供所需的价值。
修改#2 强>
你可以参考这个值:
SELECT p1.[key],
p2.[key],
p2.[value]
FROM OPENJSON (@js, '$.cars') as p1
CROSS APPLY (
SELECT *
FROM OPENJSON ([value], '$')
) p2
WHERE p1.[key] = 'VW'
输出:
key key value
--- ------- ----------
VW name Volkswagen
VW country Germany
(2 row(s) returned)
答案 1 :(得分:0)
很遗憾,我现在无法访问SQL Server 2016来自行验证。但是this可以帮到你。
答案 2 :(得分:0)
谢谢大家。 我已经认为我知道答案,除了我把它写成p1.key并在SSMS中出错,这让我偏离了正轨。直到我读到你的解决方案时才知道我必须把它写成p1。[key]因为 key 是一个保留字。相当愚蠢的称呼列'键'我认为,当第一个是MS SQL中的保留字而第二个是ISO SQL中的保留字时,它就是'值'生活和学习。