SQL Server 2008 JSON_值与替换方法

SQL Server 2008 JSON_值与替换方法,sql,json,sql-server-2008,replace,Sql,Json,Sql Server 2008,Replace,在SQLAzure中的SQLServer2008数据集中,我有一个查询,试图解析现有JSON格式列中的多个元素 带有replace方法的JSON_值在前几列中运行良好 但是,在使用replace方法添加额外的JSON_值之后,SQL Server现在抛出了一个错误 这是我的疑问: SELECT ApplicationID, Type, CreateDate, JSON_VALUE(RawContent,'$.errorName') AS ErrorName, JSON_

在SQLAzure中的SQLServer2008数据集中,我有一个查询,试图解析现有JSON格式列中的多个元素

带有replace方法的JSON_值在前几列中运行良好

但是,在使用replace方法添加额外的JSON_值之后,SQL Server现在抛出了一个错误

这是我的疑问:

SELECT 
    ApplicationID, Type, CreateDate,
    JSON_VALUE(RawContent,'$.errorName') AS ErrorName,
    JSON_VALUE(replace(replace(RawContent,'[',''),']',''),'$.errorMessage') AS ErrorMessage,
    JSON_VALUE(RawContent,'$.bookId') AS BookId,
    JSON_QUERY(RawContent,'$.urlParams') AS UrlParams,
    JSON_VALUE(replace(RawContent,',',''),'$.userAgent') AS UserAgent, --line in question
    JSON_VALUE(replace(RawContent,' ','') ,'$.stackTrace') AS StackTrace
FROM 
    dbo.Feedback
WHERE 
    ISJSON(RawContent) > 0 
ORDER BY 
    RecordID 
我的json格式列RawContent如下所示:

{"errorName": "not authorized",
 "errorMessage":"Request denied: account permission error",
 "bookId":"150675",
 "urlParams":{"audiobook":"https://node.axisnow.com/#audiobook/"},
 "userAgent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"}
因此,我希望查询为每个JSON_值生成一列,同时从列userAgent中删除逗号“”,如下所示:

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36
只有没有逗号,看起来像:KHTML像壁虎

replace方法适用于errormessage和stack trace,但由于某种原因,当我在userAgent行上运行它时,它会导致一个错误,它似乎不喜欢,字符,我想知道我需要使用什么,因为我在网上找不到任何东西

错误消息:

Msg 13609,第16级,第2状态,第1行 JSON文本格式不正确。在位置43处发现意外字符“:”


请帮忙。我的老板希望这件事能在昨天完成…

根据我的研究,这项任务似乎没有理想的解决方案。由于JSON_VALUE方法使用逗号作为分隔符将JSON字符串分解为多个列,因此在本例中无法删除它。希望这对其他人有所帮助

所有这些JSON函数都是SQL Server 2016中的新功能-我想知道您希望它们在SQL Server 2008中如何工作……您是否在运行SSMS 2008管理GUI,但针对2016引擎?运行“选择@@VERSION”并查看您的编码所针对的引擎版本。再次声明:SQL Server 2008从来没有像JSON_值这样的值-除非您安装了某种基于.NET/SQL-CLR的扩展或其他什么东西,否则这不可能在2008上工作。@marc_s JSON_值可以工作,因为数据集来自SQL azure。我将对问题进行编辑以反映这一点。谢谢