在SQL Server 2019中从MercadoLibre API的JSON数据定位GTIN字段
在SQL Server 2019中不依赖数组索引提取JSON中的GTIN字段
你可以通过两种可靠的方法定位GTIN字段,完全摆脱对attributes数组元素顺序的依赖:
方法1:使用JSON_VALUE结合过滤路径
直接通过JSON路径表达式筛选出name为"GTIN"的数组元素,提取其value值:
SELECT JSON_VALUE(YourJsonColumn, '$.attributes[?(@.name == "GTIN")].value') AS GTIN FROM YourTable
- 路径
$.attributes[?(@.name == "GTIN")]会遍历整个attributes数组,自动匹配所有name属性等于"GTIN"的元素 - 如果数组中存在多个GTIN元素,
JSON_VALUE会返回第一个匹配的值
方法2:使用OPENJSON展开数组并筛选
如果需要处理多个GTIN匹配项,或者需要更灵活的字段处理,可以用OPENJSON将数组拆分为行数据后筛选:
SELECT j.value AS GTIN FROM YourTable CROSS APPLY OPENJSON(YourJsonColumn, '$.attributes') WITH ( name NVARCHAR(100) '$.name', value NVARCHAR(100) '$.value' ) j WHERE j.name = 'GTIN'
OPENJSON会把attributes数组的每个元素拆成一行,通过WITH子句映射出name和value字段- 用
WHERE子句精准筛选name为"GTIN"的记录,若有多个匹配会返回所有结果;需单值的话可添加DISTINCT或TOP 1
额外提示
如果API返回的name值存在大小写差异(比如"gtin"或"Gtin"),可以在条件中统一大小写:
- 方法1修改路径:
$.attributes[?(@.name =~ /GTIN/i)].value(SQL Server支持正则匹配的i标志) - 方法2修改WHERE子句:
WHERE LOWER(j.name) = 'gtin'
内容的提问来源于stack exchange,提问作者Juan Pablo Humani
相关产品推荐
相关产品推荐

