2016-09-06 126 views
0

SQL Server或Visual Studio中是否有方法/函数/ reg-ex,通过它我们可以在字符串中转义任何字符/特殊字符?如何在SQL Server中解析json格式的字符串

我有一个功能/页面有服务器文本字段,用户可以输入任何种类的字符串(包括特殊字符)。因此,我将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函数都可以做到的。请建议。

+0

哪个版本的SQL Server? – Shnugo

+0

给出的示例不超过300个字符。你的错误消息告诉*位置1246 *。你提供的功能似乎可以很好地与给定的字符串一起工作...可能是,问题发生在其他地方... – Shnugo

+0

@Shnugo,SQL Server 2012 – GreenSoft

回答

0

你可以试试这个提到here
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');

+0

我需要在C#或SQL Server中的解决方案。 – GreenSoft

0

尝试通过使用将输入字符串JSON:

一个)System.Web.HttpUtility.JavaScriptStringEncode

string jsonEncoded = HttpUtility.JavaScriptStringEncode(s) 

b)中NuGet包Newtonsoft。 Json

string jsonEncoded = JsonConvert.ToString(s) 

参考:How to escape JSON string?