2017-08-25 75 views
2

我有以下的JSON数据转义字符查询

DECLARE @jsonData NVARCHAR(MAX) 
SET @jsonData = 
'{ 
    "insertions":[ 
     { 
     "id":"58735A79-DEA8-462B-B3EB-C2797CA9D44E", 
     "last-modified":"2017-08-08 13:07:32", 
     "label":"HelloWorld1" 
     }, 
     { 
     "id":"00565BCD-4240-46CF-A48F-849CB5A8114F", 
     "last-modified":"2017-08-08 13:11:38", 
     "label":"HelloWorld12" 
     } 
    ] 
}' 

,并试图从中进行选择:

SELECT 
    * 
FROM 
    OPENJSON(JSON_QUERY(@jsonData,'$.insertions')) 
WITH 
    (uuid UNIQUEIDENTIFIER '$.id', 
    modified DATETIME '$.last-modified', 
    Label NVARCHAR(128) '$.label' 
    ) 

它不喜欢在最后破折号修改字段。

消息13607,级别16,状态4,第18行
JSON路径的格式不正确。在位置6找到意外的字符' - '。

有没有办法在查询中转义破折号?如果没有短划线,一切正常。

以支持JSON需要,我使用SQL Server 2016兼容级别= 130

回答

3

周围添加字段名称双引号,似乎工作

SELECT 
    * 
FROM 
    OPENJSON(JSON_QUERY(@jsonData,'$.insertions')) 
WITH 
    (uuid UNIQUEIDENTIFIER '$.id', 
    modified DATETIME '$."last-modified"', 
    Label NVARCHAR(128) '$.label' 
    )