如何使用 JSON_EXTRACT 获取字符串索引的值
How to use JSON_EXTRACT to get values of a string index
我有以下数据行:
我正在尝试使用 JSON_EXTRACT 仅当 jot_locale_vars 中的索引等于“2”时才获取行。
SELECT
jot.*,
(JSON_EXTRACT(`jot_locale_vars`, '$[2]')) as localeVar
FROM job_type jot
WHERE jot_excluded = ''
HAVING localeVar IS NOT NULL
但是,如您所见,我已经使用 $[2]
,但数组索引从零开始。所以...字符串 1 等于 [0]
,2 等于 [1]
...我不能以这种方式使用。
如果有字符串索引条件,我如何提取值?
如果您要查看对象内部是否存在 key,那么您需要使用 JSON_CONTAINS_PATH
.
SELECT `jot`.*,
`jot_locale_vars`->'$[*]."2"' AS `localeVar`
FROM `job_type` AS `jot`
WHERE `jot_excluded` = 0
AND JSON_CONTAINS_PATH(`jot_locale_vars`, 'one', '$[*]."2"')
注意:这需要MySQL5.7+
注意 2:->
运算符只是 shorthand 用于 JSON_EXTRACT()
。
可在以下位置找到路径的语法:https://dev.mysql.com/doc/refman/5.7/en/json.html#json-path-syntax
我正在使用 $[*]."2"
,这意味着包含名为 "2"
(."2"
) 的键的“任何数组值”([*]
)。
我有以下数据行:
我正在尝试使用 JSON_EXTRACT 仅当 jot_locale_vars 中的索引等于“2”时才获取行。
SELECT
jot.*,
(JSON_EXTRACT(`jot_locale_vars`, '$[2]')) as localeVar
FROM job_type jot
WHERE jot_excluded = ''
HAVING localeVar IS NOT NULL
但是,如您所见,我已经使用 $[2]
,但数组索引从零开始。所以...字符串 1 等于 [0]
,2 等于 [1]
...我不能以这种方式使用。
如果有字符串索引条件,我如何提取值?
如果您要查看对象内部是否存在 key,那么您需要使用 JSON_CONTAINS_PATH
.
SELECT `jot`.*,
`jot_locale_vars`->'$[*]."2"' AS `localeVar`
FROM `job_type` AS `jot`
WHERE `jot_excluded` = 0
AND JSON_CONTAINS_PATH(`jot_locale_vars`, 'one', '$[*]."2"')
注意:这需要MySQL5.7+
注意 2:->
运算符只是 shorthand 用于 JSON_EXTRACT()
。
可在以下位置找到路径的语法:https://dev.mysql.com/doc/refman/5.7/en/json.html#json-path-syntax
我正在使用 $[*]."2"
,这意味着包含名为 "2"
(."2"
) 的键的“任何数组值”([*]
)。