You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:29:28