SQL中如何按索引[0]提取JSON键值?或提取该JSON值的最优方法
嘿,我来帮你解决这个SQL里提取JSON动态键值的问题!
首先,针对你给出的JSON结构,要获取data下第一个键对应的值,最优的方法是利用OPENJSON来解析data对象,然后取结果集中的第一行(也就是索引[0]的条目)。因为data下面的键是动态的(比如这里的Accountable Inventory Technician|99999),没法直接通过固定键名来提取,所以遍历data的键值对是最靠谱的方式。
具体实现代码
结合你声明的变量,完整示例如下:
declare @jsonString nvarchar(max) set @jsonString = '{ "action": "edit", "data": { "Accountable Inventory Technician|99999": { "PosTitle": "Accountable Inventory TECH", "Publish": "true" } } }' -- 获取data下第一个键的名称及其内部属性值 SELECT TOP 1 [key] AS DynamicDataKey, -- 这里拿到的就是"Accountable Inventory Technician|99999" JSON_VALUE(value, '$.PosTitle') AS PosTitle, JSON_VALUE(value, '$.Publish') AS Publish FROM OPENJSON(@jsonString, '$.data')
如果只需要第一个键对应的整个JSON对象值,直接取value即可:
SELECT TOP 1 value AS DynamicDataValue FROM OPENJSON(@jsonString, '$.data')
关于按索引[0]提取JSON键值的通用方法
如果要在SQL中按索引[0](也就是第一个键)提取JSON对象的键值,核心思路就是用OPENJSON解析目标JSON对象路径,然后通过TOP 1或者OFFSET 0 FETCH NEXT 1 ROWS ONLY来获取结果集的第一行。需要注意的是:
- 在SQL Server 2017及以后的版本,
OPENJSON返回的行顺序会和JSON对象中键的出现顺序一致; - 如果是更早的版本,键的顺序不保证,但如果你的JSON结构是固定顺序的,这个方法依然有效。
举个更通用的例子,假设你有一个JSON对象{"a":1,"b":2},要取第一个键a的值:
DECLARE @demoJson nvarchar(max) = '{"a":1,"b":2}' SELECT TOP 1 value FROM OPENJSON(@demoJson)
这样就能拿到索引[0]对应的键值啦。
内容的提问来源于stack exchange,提问作者NamedArray
相关产品推荐
相关产品推荐

