首页 > 解决方案 > 将 JSON 文件保存到 SQL Server 数据库表

问题描述

我有一个嵌套的JSON文件,如下所示(条件和规则可以嵌套到多个级别)

    {
    "condition": "and",
    "rules": [
      {
        "field": "26",
        "operator": "=",
        "value": "TEST1"
      },
      {
        "field": "36",
        "operator": "=",
        "value": "TEST2"
      },
      {
        "condition": "or",
        "rules": [
          {
            "field": "2",
            "operator": "=",
            "value": 100
          },
          {
            "field": "3",
            "operator": "=",
            "value": 12
          },
          {
            "condition": "or",
            "rules": [
              {
                "field": "12",
                "operator": "=",
                "value": "CA"
              },
              {
                "field": "12",
              "operator": "=",
              "value": "AL"
            }
          ]
        }
      ]
    }
  ]
}

我想将此 JSON(json 文件中的条件和规则字段可以嵌套到多个级别)保存到 SQL Server 表中,然后想从这些创建的表中构造相同的 JSON。我怎样才能做到这一点 ?我计划从这些表中获取其他 json 格式,这也是为什么决定将 json 拆分为表列的原因。

我认为需要创建一个递归 sql 函数来做同样的事情。

我创建了下表来保存相同的 json 。

CREATE TABLE [Ruleset]
([RulesetID]       [BIGINT] IDENTITY(1, 1) NOT NULL PRIMARY KEY,
 [Condition]       [VARCHAR](50) NOT NULL,
 [ParentRuleSetID] [BIGINT] NULL
);
GO
CREATE TABLE [Rules]
([RuleID]    [BIGINT] IDENTITY(1, 1) NOT NULL PRIMARY KEY,
 [Fields]    [VARCHAR](MAX) NOT NULL,
 [Operator]  [VARCHAR](MAX) NOT NULL,
 [Value]     [VARCHAR](MAX) NOT NULL,
 [RulesetID] [BIGINT] NULL
                      FOREIGN KEY REFERENCES [Ruleset](RulesetID)
);

插入脚本如下,

INSERT INTO [Ruleset] values  
 ('AND',0),
 ('OR',1),
 ('OR',2) 

 INSERT INTO [Rules] values  
 ('26','=','TEST1',1),
 ('364','=','TEST2',1),
 ('2','=','100',2),
 ('3','=','12',2),
  ('12','=','CA',3),
 ('12','=','AL',3)

这些表就够了吗?能保存所有细节吗?

手动附加我添加到这些表中的值。

在此处输入图像描述

我如何将此 JSON 保存到这些表中,然后通过存储过程或查询从这些表中构造相同的 JSON?

请提供建议和样品!

标签: sqljsonsql-serverdatabasestored-procedures

解决方案


实际上,您可以将列类型声明为 NVARCHAR(MAX),并将 json 字符串保存到其中。


推荐阅读