SQL Server读取含连字符的JSON属性报错,求最优解决方案
读取含连字符的JSON属性(SQL Server)
在SQL Server中使用OPENJSON读取包含连字符的JSON属性(如示例中的name-surname)时,会触发错误:JSON path is not properly formatted. Unexpected character '-' is found at position 11。无需替换整个JSON字符串中的连字符,直接调整JSON路径格式即可解决问题。
最优解决方案
SQL Server的JSON路径语法支持用双引号包裹带特殊字符的属性名,无需修改原始JSON内容,直接在路径中对含连字符的属性名进行包裹即可。
修改后的代码
DECLARE @json NVARCHAR(MAX); SET @json = N'[ {"id": 2, "info": {"name-surname": "John-TAG","firstname": "John", "lastname": "Smith"}, "age": 25}, {"id": 5, "info": {"name-surname": "John-CAB","firstname": "Jane", "lastname": "Smith"}, "dob": "2005-11-04T12:00:00"} ]'; SELECT * FROM OPENJSON(@json) WITH ( id INT 'strict $.id', namesurname NVARCHAR(50) '$.info."name-surname"', -- 用双引号包裹含连字符的属性名 firstName NVARCHAR(50) '$.info.firstname', lastName NVARCHAR(50) '$.info.lastname', age INT, dateOfBirth DATETIME2 '$.dob' );
说明
当JSON属性名包含连字符、空格、特殊符号等不符合常规标识符规则的字符时,只需在JSON路径中将该属性名用双引号括起来,就能让SQL Server正确识别属性,避免了修改原始JSON字符串带来的性能损耗和误替换风险(比如属性值中的连字符被错误替换)。
内容的提问来源于stack exchange,提问作者VAIB TAG
相关产品推荐
相关产品推荐

