提问人:txapeldot 提问时间:9/13/2023 最后编辑:Drewtxapeldot 更新时间:9/23/2023 访问量:53
在 JSON 对象中获取给定键名称的属性值
Get the value of a property given the name of a key, within a JSON object
问:
我正在尝试获取包含在对象中的属性的值,以满足另一个属性的名称与特定值匹配的条件。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 语句(基于从这篇文章中获得的一些线索):
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
如能说明如何完成目标任务,将不胜感激。
答:
2赞
lemon
9/13/2023
#1
您可以使用 JSON_TABLE
从表中提取值。这将确保您的值正确链接到您的姓名。然后,使用相应的“value_”列过滤您的值就足够了。
SELECT tab.value_
FROM mytable,
JSON_TABLE(mytable.jsonstr->'$.f2',
'$[*]' COLUMNS (name_ VARCHAR(30) PATH '$.name',
value_ VARCHAR(30) PATH '$.value')
) AS tab
WHERE tab.name_ = 'hit'
"输出“:
价值_ |
---|
foo_hit |
在此处查看演示。
评论
WHERE
$.**.name
$**.name
="hit"