【问题标题】:How to use JSON_EXTRACT to get values of a string index如何使用 JSON_EXTRACT 获取字符串索引的值
【发布时间】:2021-02-17 10:42:15
【问题描述】:

我有以下数据行:

只有在 jot_locale_vars 中的索引等于“2”时,我才尝试使用 JSON_EXTRACT 获取行。

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]...我不能这样使用。

如果有条件的字符串索引如何提取值?

【问题讨论】:

    标签: mysql json mysql-json


    【解决方案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"')
    

    注意:这需要 MySQL 5.7+
    注意 2:-> 运算符只是 JSON_EXTRACT() 的简写。


    路径的语法可以在以下位置找到:https://dev.mysql.com/doc/refman/5.7/en/json.html#json-path-syntax

    我使用的是$[*]."2",这意味着“任何数组值”([*]),其中包含一个名为"2" (."2") 的键。

    【讨论】:

    • 不错!差不多了!现在,我可以像我的示例一样获取别名字段上的键值吗?
    • @MaykelEsser 检查更新的答案,您可以使用相同路径的JSON_EXTRACT()
    猜你喜欢
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-22
    • 2011-01-27
    • 2021-12-05
    • 2017-11-22
    • 2014-12-02
    相关资源
    最近更新 更多