如何在SQL Server中解析json格式的字符串
问题描述:
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函数都可以做到的。请建议。
答
您可以将表数据直接转换成JSON在2016年,例如,
SELECT name, surname
FROM emp
FOR JSON AUTO
但在低版本,你有你的转换的情况下, SQL表数据到XML然后到JSON。
请参阅此链接将SQL数据解析为Json。
http://www.codeproject.com/Articles/815371/Data-Parsing-SQL-to-JSON
答
尝试通过使用将输入字符串JSON:
一个)System.Web.HttpUtility.JavaScriptStringEncode
string jsonEncoded = HttpUtility.JavaScriptStringEncode(s)
或
b)中NuGet包Newtonsoft。 Json
string jsonEncoded = JsonConvert.ToString(s)
哪个版本的SQL Server? – Shnugo
给出的示例不超过300个字符。你的错误消息告诉*位置1246 *。你提供的功能似乎可以很好地与给定的字符串一起工作...可能是,问题发生在其他地方... – Shnugo
@Shnugo,SQL Server 2012 – GreenSoft