问题描述
在我的数据库中,我有一列存储 JSON。 JSON 如下所示:
{
"views": [
{
"id": "1","sections": [
{
"id": "1","isToggleActive": false,"components": [
{
"id": "1","values": [
"02/24/2021"
]
},{
"id": "2","values": []
},{
"id": "3","values": [
"5393","02/26/2021 - Weekly"
]
},{
"id": "5","values": [
""
]
}
]
}
]
}
]
}
我想创建一个迁移脚本,从这个 JSON 中提取一个值并将它们存储在自己的列中。
在上面的 JSON 中,在 components
数组中,我想从 component
中提取第二个值,其中 ID
为“3”(除其他外,但这是一个很好的例子)。因此,我想提取值“02/26/2021 - Weekly”以存储在其自己的列中。
我正在查看 JSON_VALUE docs,但我只看到了为 json 属性指定索引的示例。我不知道我需要什么样的 json 路径。这甚至可以与 JSON_VALUE 一起使用吗?
编辑:澄清一下,视图和部分组件可以有静态数组索引,所以我可以使用 views[0].sections[0] 。目前,这就是我的 sql 查询的全部内容:
SELECT
*
FROM OPEnjsON(@jsonInfo,'$.views[0].sections[0]')
解决方法
您需要使用 OPENJSON
来拆分内部数组,然后使用 WHERE
对其进行过滤,最后使用 JSON_VALUE
选择正确的值
SELECT
JSON_VALUE(components.value,'$.values[1]')
FROM OPENJSON (@jsonInfo,'$.views[0].sections[0].components') components
WHERE JSON_VALUE(components.value,'$.id') = '3'