sql - 关于使用 OPENJSON 解析嵌套数组的建议
问题描述
我希望有人可以帮助我指出正确的方向,因为我正在尝试使用 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
or之类的值NameId
。但是,我无法返回关于com_recd
or的任何日期com_ack
,它们位于 CommsChains [Object] – Value [Array] – [0] [Array] 下
解决方案
您的 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 服务器上 JSON 路径的更多信息,请查看此处
推荐阅读
- mongodb - 创建 LocalTime BsonDatetime 对象
- java - springboot 2.3.0 actuator liveness/readiness check 返回错误响应
- django - 在 Wagtail 应用程序之外使用 Wagtail 的网站设置
- angular - 如何创建唯一的模板引用变量
- sql - 使用 if else 语句创建存储过程会产生编译错误
- asp.net-core - EPPlus ExcelPackage ByteArray to PDF File
- django - 在 Django 中提交表单后,模型中没有创建对象
- android - 如何使用房间从 recyclerview 中删除一行?
- xml - 在 XSLT 中将日期时间从一个时区转换为另一个时区
- php - 他们有什么方法可以循环遍历数组的数据并从中创建另一个数组吗?