我试图获取JSON
对象中包含的属性的值,满足另一个属性的名称与特定值匹配的条件。
假设我将下面的JSON对象存储在一个列中:
{
"f2": [
{"name":"f21","value":"foo_21"},
{"name":"hit","value":"foo_hit"},
{"name":"f22","value":"foo_22"}
]
}
我想获取值 “foo_hit”,因为它是与值 “foo_hit” 所属的JSON对象的给定名称 “hit” 匹配的值。请记住,匹配的JSON对象{"name":"hit","value":"foo_hit"}
可以出现在数组中的任何位置。
期望得到的值是"foo_hit"
(包括双引号)。
为了实现这一点,我尝试了以下sql语句(基于从post中得到的一些线索):
CREATE TABLE mytable (jsonstr JSON);
INSERT INTO mytable VALUES
('{"f2": [{"name":"f21","value":"foo_21" },
{"name":"hit","value":"foo_hit"},
{"name":"f22","value":"foo_22" }]}');
SELECT JSON_EXTRACT(jsonstr,'$**.name')
FROM mytable
WHERE (JSON_EXTRACT(jsonstr,'$**.name')="hit");
但是SELECT
语句产生空结果。
如能澄清如何完成目标任务,将不胜感激。
1条答案
按热度按时间k3bvogb11#
您可以使用
JSON_TABLE
从表中提取值。这将确保您的值正确链接到您的名称。然后,使用相应的“value_”列过滤值就足够了。“输出":
| 价值|
| --|
| foo_hit|
查看演示here。