ms sql(sql Server)中\u0格式(json)的unescape DIATTRICS
我正在获取json文件,并将其加载到Azure SQL数据库中。这个json是API的直接输出,所以在加载到DB之前我对它无能为力。 在该文件中,所有TIRC都转义为“C/C++/Java源代码”(基于: 例如:ms sql(sql Server)中\u0格式(json)的unescape DIATTRICS,json,sql-server,type-conversion,azure-sql-database,unicode-escapes,Json,Sql Server,Type Conversion,Azure Sql Database,Unicode Escapes,我正在获取json文件,并将其加载到Azure SQL数据库中。这个json是API的直接输出,所以在加载到DB之前我对它无能为力。 在该文件中,所有TIRC都转义为“C/C++/Java源代码”(基于: 例如: ł is \u0142 我试图找到一些方法将这些转换成正确的波兰字母 在更糟糕的情况下,我可以编写函数来替换所有的组合 Repalce(Replace(Replace(string,'\u0142',N'ł'),'\u0144',N'ń'))) 等等,做一个大的,可怕的功能 我一
ł is \u0142
我试图找到一些方法将这些转换成正确的波兰字母
在更糟糕的情况下,我可以编写函数来替换所有的组合
Repalce(Replace(Replace(string,'\u0142',N'ł'),'\u0144',N'ń')))
等等,做一个大的,可怕的功能
我一直在寻找一些现成的函数,比如URLdecode,这在这里的许多主题的堆栈中都得到了回答,这里:
使用此解决方案是可能的,但我无法通过适当的排序规则和类型来确定cast/convert,以获得我想要的结果。
因此,如果有人知道/拥有可以在字符串中进行转换的函数,\u这将非常好,但如果我能够正确转换,我将设法自己编写一些内容。例如,我尝试了:
select convert(nvarchar(1), convert(varbinary, 0x0142, 1))
我假设将\u更改为0x将是答案,但它会给出一些汉字。所以这是错误的方向
编辑:
在谷歌搜索了更多信息后,我在@Pasetchnik的堆栈上发现了完全相同的问题:
看起来这将是MS SQL中最好的解决方案。
我唯一需要更改的是使用NVARCHAR而不是链接解决方案中的VARCHAR:
CREATE FUNCTION dbo.Json_Unicode_Decode(@escapedString nVARCHAR(MAX))
RETURNS nVARCHAR(MAX)
AS
BEGIN
DECLARE @pos INT = 0,
@char nvarCHAR,
@escapeLen TINYINT = 2,
@hexDigits TINYINT = 4
SET @pos = CHARINDEX('\u', @escapedString, @pos)
WHILE @pos > 0
BEGIN
SET @char = NCHAR(CONVERT(varbinary(8), '0x' + SUBSTRING(@escapedString, @pos + @escapeLen, @hexDigits), 1))
SET @escapedString = STUFF(@escapedString, @pos, @escapeLen + @hexDigits, @char)
SET @pos = CHARINDEX('\u', @escapedString, @pos)
END
RETURN @escapedString
END
代替嵌套的
REPLACE
,您可以使用:
DECLARE @string NVARCHAR(MAX)= N'\u0142 \u0144\u0142';
SELECT @string = REPLACE(@string,u, ch)
FROM (VALUES ('\u0142',N'ł'),('\u0144', N'ń')) s(u, ch);
SELECT @string;
谢谢,这会很有帮助!但我还是希望有人知道是否有转换的选项;)现在我将准备函数,以这种方式完成这项工作