【发布时间】:2017-01-13 11:49:19
【问题描述】:
SQL Server 或 Visual Studio 中是否有一种方法/函数/reg-ex 可以转义字符串中的任何字符/特殊字符?
我有一个功能/页面,其中有服务器文本字段,用户可以在那里输入任何类型的字符串(包括特殊字符)。结果,我将 JSON 字符串显示为这些文本字段条目的“键”、“值”部分。
例如:我在页面上有这些字段:
Name , LastName , Address
以上字段的输入值为:
Name : *-+-#. Wwweee4426554456666yyyy5uuuuttrrrreree6655zfgh\\][;'/.uuuuuuuu66uuyt,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\
LastName : Piterson
Address : Park Road, LA
我在下面显示的输出类似于 JSON 字符串-
[{"Key":"Name","Value":"*-+-#.Wwweee4426554456666yyyy5uuuuttrrrreree6655zfgh\\][;'/.uuuuuuuu66uuyt,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\\\"?><\\\\][;'/.,+_)(*&^%$#@!~|}{:\"},{"Key":"LastName","Value":"Piterson"},{"Key":"Address","Value":"Park Road, LA"}]
但是在解析这个字符串时,我在下面遇到一个解析错误 -
"After parsing a value an unexpected character was encountered: K. Path '[4].Value', line 1, position 1246."
我正在使用下面的 SQL Server 函数来解析字符串 -
ALTER function [dbo].[fnEscapeString](@text nVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
as
BEGIN
--if(CHARINDEX() )
if (CHARINDEX('\',@text) > 0)
set @text = Replace(@text,'\','\\')
if (CHARINDEX('"',@text) > 0)
set @text = Replace(@text,'"','\"')
return @text
END
此函数在许多其他情况下(与许多其他字符串)都有效。但不适用于上述字符串。我认为这个函数不足以解析所有类型的字符串。
那么有什么方法可以解析有效 JSON 行格式的字符串。可能是任何 reg-ex 或 sql 函数都可以做到这一点。请提出建议。
【问题讨论】:
-
SQL-Server 的哪个版本?
-
给定的示例不超过 300 个字符。您的错误消息说明了 位置 1246。您提供的功能似乎适用于给定的字符串...可能是问题发生在其他地方...
-
@Shnugo,SQL Server 2012
-
@Shnugo,我刚刚分享了一段代码,例如整个字符串很大。但关键是这个字符串没有被我的函数解析为 JSON 格式。
-
如何构建 JSON?当前字符串不是有效的 JSON
标签: c# sql-server json regex string-parsing