如何使用 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") 的键的“任何数组值”([*])。