关于使用openjson解析嵌套数组的建议

voj3qocg  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(359)

我希望有人能帮我指明正确的方向,因为我正在尝试使用openjson将json文件解析为sql。我有一个这样的结构:

DECLARE @json AS NVARCHAR(MAX) = '

[{
        "id": "78",
        "Version": {
            "Value": "12"
        },

        "Names": [{
                "NameId": {
                    "Value": "8516365"
                },
                "id": "328787",
                "NameLinkType": {
                    "Value": "A"

                    "CommsChains": {
                        "Value": [[{
                                    "com_primary": {
                                        "Value": "Y"
                                    },
                                    "com_recd": {
                                        "Value": "2020-07-07 00:00:00.000"
                                    },
                                    "com_ack": {
                                        "Value": "2020-07-09 00:00:00.000"

                                    },
                                }
                            ]]
                ),  },
            },

        ],

    }
]'

我能够正确解析大多数json,因此对于每个id,我可以返回如下值 Version 或者 NameId . 但是,我无法返回任何日期有关 com_recd 或者 com_ack ,位于commschains[object]–value[array]–[0][array]下

56lgkhnf

56lgkhnf1#

您的json中似乎有一些语法错误。在修复它们之后,我能够尝试找到日期表达式到日期值的json路径。这是sql:

DECLARE @json AS NVARCHAR(MAX) = '
[{
        "id": "78",
        "Version": {
            "Value": "12"
        },

        "Names": [{
                "NameId": {
                    "Value": "8516365"
                },
                "id": "328787",
                "NameLinkType": {
                    "Value": "A",

                    "CommsChains": {
                        "Value": [[{
                                    "com_primary": {
                                        "Value": "Y"
                                    },
                                    "com_recd": {
                                        "Value": "2020-07-07 00:00:00.000"
                                    },
                                    "com_ack": {
                                        "Value": "2020-07-09 00:00:00.000"

                                    }
                                }
                            ]]
                    }
                }
            }

        ]

    }
]'
select * from openjson(@json, '$[0].Version');--Value 12 1
select * from openjson(@json, '$[0].Names');
select * from openjson(@json, '$[0].Names[0]');
select * from openjson(@json, '$[0].Names[0].NameLinkType');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0]');
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0]');

select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_recd'); --selecting path for com_recd
select * from openjson(@json, '$[0].Names[0].NameLinkType.CommsChains.Value[0][0].com_ack');  --selecting path for com_ack

在这里,我展示了json不同部分的选择。数组的内容总是引用为 [0] 因为它总是第一个在这里选择的索引。
有关sql server上json路径的更多信息,请参见此处

相关问题