Sql server 解析JSON文件-改进SQL Server中的查询

Sql server 解析JSON文件-改进SQL Server中的查询,sql-server,jsonparser,string-agg,Sql Server,Jsonparser,String Agg,从这个JSON文件中,我只需要一个例子就可以得到这个最终结果 { "Id": "101", "name": "C01", "testparameters": { "room": [ { "Floor": "First_Floor",

从这个JSON文件中,我只需要一个例子就可以得到这个最终结果

{
    "Id": "101",
    "name": "C01",
    "testparameters": {
        "room": [
            {
                "Floor": "First_Floor",
                "Rooms": ["Room1", "Room2", "Room3"]
            },
            {
                "Floor": "Second_Floor",
                "Rooms": ["Room1", "Room2", "Room3"]
            }
        ],
        "area": [
            {               
                "Name": "Area1",
                "Subarea": ["Subarea1", "Subarea2", "Subarea3"]
            },
            {               
                "Name": "Area2",
                "Subarea": ["Subarea4", "Subarea5"]
            }
        ],
        "requirements": [{
                "condition": "",
                "type": "type1",                
                "field1": "",
                "field2": "aaaaa",
                "operator": "",
                "value2": ""
            },
            {
                "condition": "AND",
                "type": "type2",            
                "field1": "",
                "field2": "numPersons",
                "operator": ">",
                "value2": "20"
            },
            {
                "condition": "OR",
                "type": "type2",            
                "field1": "",
                "field2": "specification",
                "operator": "=",
                "value2": "wifi"
            }
        ]
    }
}
'
在一个登记册中,我需要所有要求的信息

这是我第一次需要解析JSON文件。在问了很多问题后,我通过这样做达到了预期的结果:


然而,我不得不多次打开JSON文件,并分开处理每个部分。我想知道,如何通过减少使用OPENJSON函数的次数来改进代码,特别是如何重写处理需求部分的代码片段。

我必须说,您想要的结果看起来非常不规范,您可能需要重新思考

尽管如此,通过使用嵌套子查询,您可以非常轻松地组合这些查询

选择 ID=JSON_VALUEj.JSON,'$.ID', name=JSON_VALUEj.JSON,'$.name', 面积= 选择字符串_aggcontd.a',:',b.value',-' 从openjsonj.json,“$.testparameters.area” 具有 一个nvarchar250“$.Name”, s nvarcharmax“$.subrea”作为json as d 交叉应用openjsond.s作为b , 房间= 选择字符串_aggcontc.f':',d.value'-' 来自openjsonj.json,“$.testparameters.room” 具有 f nvarchar50'$.Floor', r nvarcharMax“$.Rooms”作为json as c 交叉应用openjsonc.r作为d , 要求= 选择IIF 子字符串要求,1,3='和',或子字符串要求,1,3='或', 子字符串要求,第5条,子字符串要求, 要求 从…起 选择 字符串\u aggcont \u WS“”, a、 条件,, a、 字段2, 操作人员 IIF ISNUMERICa.value2=1, a、 价值2, 康卡特,a.2, , ""按要求, 来自openjsonj.json,“$.testparameters.requirements” 具有 条件nvarchar255'$.condition', 类型nvarchar255'$.type', 字段2 nvarchar255'$.field2', 运算符nvarchar255'$.operator', value2 nvarchar255'$.value2' A. 其中a.type='type2' A. 从…起VALUES@json作为jjson-或者您可以引用一个表
问题必须是独立的,即包含所有代码。小提琴很有用,但不可靠。谢谢你的回复。结果是客户端请求的结果。那是储存在一张桌子上的,他们会把它放在那里。对于一些同事来说,我的代码太大了,要求我尽量减少它,特别是需求部分。你可以随时将它重构成一个内联表值函数