2016-09-06 127 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?