使用 属性 值从 MS SQL 服务器中的 JSON blob 检索特定值?
Retrieve specific value from a JSON blob in MS SQL Server, using a property value?
在我的数据库中,我有一列存储 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 相关吗?
编辑:澄清一下,视图和部分组件可以有静态数组索引,所以我可以为它们使用视图[0].部分[0]。目前,这就是我的 SQL 查询的全部内容:
SELECT
*
FROM OPENJSON(@jsonInfo, '$.views[0].sections[0]')
你需要使用 OPENJSON
来分解内部数组,然后用 WHERE
过滤它,最后 select 用 JSON_VALUE
[=14 得到正确的值=]
SELECT
JSON_VALUE(components.value, '$.values[1]')
FROM OPENJSON (@jsonInfo, '$.views[0].sections[0].components') components
WHERE JSON_VALUE(components.value, '$.id') = '3'
在我的数据库中,我有一列存储 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 相关吗?
编辑:澄清一下,视图和部分组件可以有静态数组索引,所以我可以为它们使用视图[0].部分[0]。目前,这就是我的 SQL 查询的全部内容:
SELECT
*
FROM OPENJSON(@jsonInfo, '$.views[0].sections[0]')
你需要使用 OPENJSON
来分解内部数组,然后用 WHERE
过滤它,最后 select 用 JSON_VALUE
[=14 得到正确的值=]
SELECT
JSON_VALUE(components.value, '$.values[1]')
FROM OPENJSON (@jsonInfo, '$.views[0].sections[0].components') components
WHERE JSON_VALUE(components.value, '$.id') = '3'