• MySql之json_extract函数处理json字段


    MySql之json_extract函数处理json字段

    在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出String之后再代码中进行解析?

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

    1. 使用方式

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

    语法:

    JSON_EXTRACT(json_doc, path[, path] …)
    

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

    2.使用演示

    创建一个测试的表

    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;
    

    插入几条数据

    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,如下

    mysql> select json_extract(`val`, '$.name') from `json_table`;
    +-------------------------------+
    | json_extract(`val`, '$.name') |
    +-------------------------------+
    | "一灰灰blog"                  |
    | "一灰灰blog"                  |
    +-------------------------------+
    

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

    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数组,怎么整

    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之外,也可以在查询条件中使用它

    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

  • 相关阅读:
    虚拟列表
    vue中使用postcsspxtorem实现适配
    打包工具 rollup.js 入门教程
    后端一次给你10万条数据,如何优雅展示,到底考察我什么
    手写Promise原理
    react路由集中管理及鉴权 reactrouterconfig
    结合代码实践,全面学习前端工程化
    KDE 全局菜单文字颜色不随 Plasma Style 变化
    vue使用intro.js引导组件
    第五章、Vue3高级
  • 原文地址:https://www.cnblogs.com/yihuihui/p/16327912.html
Copyright © 2020-2023  润新知