如何从SQL Server表的JSON数据中获取@odata.etag值
解决SQL Server提取JSON中@odata.etag的路径错误问题
错误原因
SQL Server的JSON路径解析器中,@是表示根节点的特殊语法字符,直接使用@odata.etag会被误判为无效路径,导致"JSON path is not properly formatted"错误。需要明确告知解析器这是一个包含特殊字符的键名。
解决方法
针对包含@和.的JSON键名,需用双引号包裹键名或方括号语法来指定路径,以下是具体实现:
方法1:使用双引号包裹键名(推荐)
通过$."@odata.etag"的路径格式,让解析器识别完整的键名:
SELECT etag FROM YourTableName CROSS APPLY OPENJSON(YourJsonColumnName) WITH ( etag NVARCHAR(MAX) '$."@odata.etag"' -- 用双引号包裹带特殊字符的键名 )
方法2:使用方括号语法
用方括号包裹键名,注意SQL中单引号需要转义(用两个单引号):
SELECT etag FROM YourTableName CROSS APPLY OPENJSON(YourJsonColumnName) WITH ( etag NVARCHAR(MAX) '$[''@odata.etag'']' -- 转义单引号包裹键名 )
简化方式:直接用JSON_VALUE提取
如果只需单独提取该字段,也可以直接使用JSON_VALUE函数,路径规则相同:
SELECT JSON_VALUE(YourJsonColumnName, '$."@odata.etag"') AS etag FROM YourTableName
示例验证
假设你的JSON数据为:
{ "@odata.etag": "W/\"xyz789\"", "Name": "TestData" }
使用上述任一方法,都能正确提取出W/"xyz789"作为etag值。
内容的提问来源于stack exchange,提问作者Daniel de Jong
相关产品推荐
相关产品推荐

