我有一个代码,可以从Coldfusion页面获取嵌套结构。
我需要将数据序列化为JSON才能插入SQL,我可以通过ColdFusion进行操作,但这是非常麻烦的。我可以仅将结构传递给SQL插入,然后SQL可以将其转换为该JSON并将其插入吗?
听起来像一个愚蠢的问题,但是我想尽我所能减少代码。
这是我的结构:
<cfset myStruct = {
"sd": {
"sp": 100,
"cn": 100,
"id": 100
}
}>
<cfdump var="#myStruct#">
答案 0 :(得分:0)
我不确定您的问题,但是如果您使用的是Javacript,则可以使用class B(A):
def __init__(self, var2=15):
super().__init__(var2=var2)
来序列化为字符串。如果您正在使用像c#这样的服务器语言,那么您将拥有一些newtonsoft这样的库。使用它们真的很简单。...
如果您的问题是您的json文件很大,并且对服务器的请求将花费太长时间,则可以将json文件压缩为BSON,但是无论如何,如果您遇到问题,我建议您首先查看您的后台服务器,以便将较小的请求发送到服务器。
然后看看this link。由于Sql Server 2016已上载,因此您正在寻找的此功能是可能的。
答案 1 :(得分:0)
JSON支持在v2016之前推出。因此,以下代码将需要SQL-Server-2016 +:
您可能会引入一个存储过程,该存储过程接受类型为NVARCHAR(MAX)
的参数,并按原样传递结构 来调用它。这是在SP中模拟代码:
DECLARE @YourStruct NVARCHAR(1000)=
N'<cfset myStruct = {
"sd": {
"sp": 100,
"cn": 100,
"id": 100
}
}>
<cfdump var="#myStruct#">';
SELECT *
FROM OPENJSON(JSON_QUERY(REPLACE(SUBSTRING(REPLACE(@YourStruct,N'<cfdump var="#myStruct#">',N''),CHARINDEX(N'{',@YourStruct),LEN(@YourStruct)),N'}>',N'}')),N'$.sd')
WITH(sp INT,cn INT, id INT);
您可以阅读为
<cfdump var="#myStruct#">
替换为空{
开头的字符串开始读取字符串}>
代替}
JSON_QUERY()
将此字符串解释为JSON(并避免使用转义引号)OPENJSON()
深入JSON并读取其值WITH
子句直接掌握直接键入的内部变量遗憾的是,该结构看起来像XML,但不是有效的XML(由于无效的XML属性myStruct
)。从XHTML检索此JSON要容易得多,但是在这种情况下,您必须将结构作为
提示将T-SQL语法的单引号加倍...
DECLARE @YourStruct NVARCHAR(1000)=
N'<cfset myStruct = ''{
"sd": {
"sp": 100,
"cn": 100,
"id": 100
}
}''/>
<cfdump var="#myStruct#"/>';
这是用XML编写的
SELECT CAST(@yourstruct as xml)
<cfset myStruct="{ "sd": { "sp": 100, "cn": 100, "id": 100 } }" />
<cfdump var="#myStruct#" />
这可以通过本机XML方法.value()
SELECT CAST(@yourstruct as xml).value('(/cfset/@myStruct)[1]','nvarchar(max)')