如何使用变量引用 JSON 列表值
How to reference JSON list value with a variable
我正在尝试这样做:
JSON_VALUE(@jsondata, CONCAT('$.[', @count, '].Name')
这样我就可以使用变量引用 json 列表中的值,但是 JSON_VALUE 函数的第二个参数(JSON 路径)需要一个字符串文字。
有没有办法让函数将字符串读取为字符串文字,或者有其他方法来引用带有变量的列表?
谢谢。
您可以通过使用 OPENJSON
.
将其解构为 table 来使用变量寻址列表
例如,给定:
declare @jsondata nvarchar(max) = '[
{"Name":"zero","Value":"cero"},
{"Name":"one","Value":"uno"},
{"Name":"two","Value":"dos"},
{"Name":"three","Value":"tres"}
]'
declare @count int set @count = 1
declare @val nvarchar(50)
set @val = (select JSON_VALUE(value, '$.Name') from OPENJSON(@JsonData) d where d."key" = @count)
select @count, @val
对于更高级的方法,您可以使用描述您感兴趣的结构和元素的架构查询 JSON:
我正在尝试这样做:
JSON_VALUE(@jsondata, CONCAT('$.[', @count, '].Name')
这样我就可以使用变量引用 json 列表中的值,但是 JSON_VALUE 函数的第二个参数(JSON 路径)需要一个字符串文字。
有没有办法让函数将字符串读取为字符串文字,或者有其他方法来引用带有变量的列表?
谢谢。
您可以通过使用 OPENJSON
.
例如,给定:
declare @jsondata nvarchar(max) = '[
{"Name":"zero","Value":"cero"},
{"Name":"one","Value":"uno"},
{"Name":"two","Value":"dos"},
{"Name":"three","Value":"tres"}
]'
declare @count int set @count = 1
declare @val nvarchar(50)
set @val = (select JSON_VALUE(value, '$.Name') from OPENJSON(@JsonData) d where d."key" = @count)
select @count, @val
对于更高级的方法,您可以使用描述您感兴趣的结构和元素的架构查询 JSON: