如何在 SQL Server 中解析 json 格式的字符串
Posted
技术标签:
【中文标题】如何在 SQL Server 中解析 json 格式的字符串【英文标题】:How to parse a string in json format in SQL Server 【发布时间】: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 【参考方案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
【讨论】:
【参考方案2】:你可以试试这个here var my_JSON_object = !(/[^,:\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
eval('(' + text + ')');
【讨论】:
我需要 C# 或 SQL Server 中的解决方案。【参考方案3】:尝试使用以下方法将输入字符串转换为 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?
【讨论】:
以上是关于如何在 SQL Server 中解析 json 格式的字符串的主要内容,如果未能解决你的问题,请参考以下文章
关于SQL Server 2017中使用json传参时解析遇到的多层解析问题