如何在SQL Server中以json格式解析字符串

时间:2016-09-06 06:25:17

标签: c# sql-server json regex string-parsing

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

我有一个功能/页面,其中有服务器文本字段,用户可以在那里输入任何类型的字符串(包括特殊字符)。因此,我将JSON字符串显示为' Key',' Value'削减那些文本字段条目。

例如:我在页面上有这些字段:

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函数都可以做到这一点。请建议。

3 个答案:

答案 0 :(得分:1)

您可以在2016年直接将表格数据转换为json,

SELECT name, surname  
FROM emp  
FOR JSON AUTO  

但是如果版本较低,则必须将sql表数据转换为xml,然后再转换为Json。

请参阅此链接以将SQL数据解析为Json。

http://www.codeproject.com/Articles/815371/Data-Parsing-SQL-to-JSON

答案 1 :(得分:0)

您可以按照here所述尝试这一点 var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test( text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');

答案 2 :(得分:0)

尝试使用以下命令将输入​​字符串转换为JSON:

a)System.Web.HttpUtility.JavaScriptStringEncode

string jsonEncoded = HttpUtility.JavaScriptStringEncode(s)

b)NuGet包Newtonsoft.Json

string jsonEncoded = JsonConvert.ToString(s)

参考:How to escape JSON string?