220425-MySql之json_extract函数处理json字段

文章目录
  1. 1. 使用方式
  2. 2.使用演示
  3. 3. 小结
  • 一灰灰的联系方式
  • 在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出String之后再代码中进行解析?

    接下来本文将介绍一下Mysql5.7+之后提供的json_extract函数,可以通过key查询value值

    1. 使用方式

    数据存储的数据是json字符串,类型为我们常用的varchar即可

    语法:

    1
    JSON_EXTRACT(json_doc, path[, path] …)

    若json字符串非数组时,可以通过$.字段名来表示查询对应的value

    2.使用演示

    创建一个测试的表

    1
    2
    3
    4
    5
    CREATE TABLE `json_table` (
    `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id',
    `val` json DEFAULT NULL COMMENT 'json字符串',
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

    插入几条数据

    1
    2
    insert into `json_table` values (1, '{"name": "一灰灰blog", "age": 18}');
    insert into `json_table` values (2, '{"name": "一灰灰blog", "site": "https://blog.hhui.top"}');

    查询json串中的name,如下

    1
    2
    3
    4
    5
    6
    7
    mysql> select json_extract(`val`, '$.name') from `json_table`;
    +-------------------------------+
    | json_extract(`val`, '$.name') |
    +-------------------------------+
    | "一灰灰blog" |
    | "一灰灰blog" |
    +-------------------------------+

    如果查询的key不在json串中,返回的是null,而不是抛异常

    1
    2
    3
    4
    5
    6
    7
    mysql> select json_extract(`val`, '$.name') as `name`, json_extract(`val`, '$.site') as `site` from `json_table`;
    +-----------------+-------------------------+
    | name | site |
    +-----------------+-------------------------+
    | "一灰灰blog" | NULL |
    | "一灰灰blog" | "https://blog.hhui.top" |
    +-----------------+-------------------------+

    接下来再看一下如果为json数组,怎么整

    1
    2
    3
    4
    5
    6
    7
    8
    9
    mysql> insert into `json_table` values (3, '[{"name": "一灰灰", "site": "https://spring.hhui.top"}]');


    mysql> select json_extract(`val`, '$[0].name') from `json_table` where id = 3;
    +----------------------------------+
    | json_extract(`val`, '$[0].name') |
    +----------------------------------+
    | "一灰灰" |
    +----------------------------------+

    除了在查询结果中使用json_extract之外,也可以在查询条件中使用它

    1
    2
    3
    4
    5
    6
    7
    mysql> select * from `json_table` where json_extract(`val`, '$.name') = '一灰灰blog';
    +----+------------------------------------------------------------+
    | id | val |
    +----+------------------------------------------------------------+
    | 1 | {"age": 18, "name": "一灰灰blog"} |
    | 2 | {"name": "一灰灰blog", "site": "https://blog.hhui.top"} |
    +----+------------------------------------------------------------+

    3. 小结

    本文主要介绍json_extract函数的使用姿势,用于解析字段内value为json串的场景

    基本使用姿势

    • json对象:json_extract(‘db字段’, ‘$.json串key’)
    • json数组:json_extract(‘db字段’, ‘$[数组下标].json串key’)

    一灰灰的联系方式

    尽信书则不如无书,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    QrCode

    # Mysql

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×