我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mysql中的json_extract怎么使用

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mysql中的json_extract怎么使用

这篇文章主要介绍“mysql中的json_extract怎么使用”,在日常操作中,相信很多人在mysql中的json_extract怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的json_extract怎么使用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    一、前言

    mysql5.7版本开始支持JSON类型字段
    json_extract可以完全简写为 ->
    json_unquote(json_extract())可以完全简写为 ->>
    下面介绍中大部分会利用简写

    二、创建示例表

    CREATE TABLE `test_json` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `content` json DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;
    # 插入两条测试用的记录INSERT INTO `test_json` (`content`) VALUES ('{\"name\":\"tom\",\"age\":18,\"score\":[100,90,87],\"address\":{\"province\":\"湖南\",\"city\":\"长沙\"}}');INSERT INTO `test_json` (`content`) VALUES ('[1, "apple", "red", {"age": 18, "name": "tom"}]');
    idcontent
    1{“age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “长沙”, “province”: “湖南”}}
    2[1, “apple”, “red”, {“age”: 18, “name”: “tom”}]

    三、基本语法

    - 获取JSON对象中某个key对应的value值

    • json_extract函数中,第一个参数content表示json数据,第二个参数为json路径,其中$表示该json数据本身,$.name就表示获取json中key为name的value值

    • 可以利用 -> 表达式来代替json_extract

    • 若获取的val本身为字符串,那么获取的val会被引号包起来,比如"tom",这种数据被解析到程序对象中时,可能会被转义为\“tom\”。为了解决这个问题了,可以在外面再包上一层json_unquote函数,或者使用 ->> 代替->

    content:
    {“age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “长沙”, “province”: “湖南”}}

    # 得到"tom"select json_extract(content,'$.name') from test_json where id = 1;# 简写方式:字段名->表达式等价于json_extract(字段名,表达式)select content->'$.name' from test_json where id = 1;# 结果:+--------------------------------+| json_extract(content,'$.name') |+--------------------------------+| "tom"                          |+--------------------------------++-------------------+| content->'$.name' |+-------------------+| "tom"             |+-------------------+# 解除双引号,得到tomselect json_unquote(json_extract(content,'$.name')) from test_json where id = 1;# 简写方式:字段名->>表达式等价于json_unquote(json_extract(字段名,表达式))select content->>'$.name' from test_json where id = 1;# 结果:+----------------------------------------------+| json_unquote(json_extract(content,'$.name')) |+----------------------------------------------+| tom                                          |+----------------------------------------------++--------------------+| content->>'$.name' |+--------------------+| tom                |+--------------------+

    - 获取JSON数组中某个元素

    • json_extract函数中,第一个参数content表示json数据,第二个参数为json路径,其中$表示该json数据本身,$[i]表示获取该json数组索引为i的元素(索引从0开始)

    • 与获取key-val一样,若获取的元素为字符串,默认的方式也会得到双引号包起来的字符,导致程序转义,方法也是利用json_unquote函数,或者使用 ->> 代替->

    content:
    [1, “apple”, “red”, {“age”: 18, “name”: “tom”}]

    # 得到"apple"select json_extract(content,'$[1]') from test_json where id = 2;# 简写,效果同上select content->'$[1]' from test_json where id = 2;# 结果:+------------------------------+| json_extract(content,'$[1]') |+------------------------------+| "apple"                      |+------------------------------++-----------------+| content->'$[1]' |+-----------------+| "apple"         |+-----------------+# 解除双引号,得到apple select json_unquote(json_extract(content,'$[1]')) from test_json where id = 2;# 简写,效果同上select content->>'$[1]' from test_json where id = 2;# 结果:+--------------------------------------------+| json_unquote(json_extract(content,'$[1]')) |+--------------------------------------------+| apple                                      |+--------------------------------------------++------------------+| content->>'$[1]' |+------------------+| apple            |+------------------+

    - 获取JSON中的嵌套数据

    结合前面介绍的两种获取方式,可以获取json数据中的嵌套数据

    content: id=1
    {“age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “长沙”, “province”: “湖南”}}
    content: id=2
    [1, “apple”, “red”, {“age”: 18, “name”: “tom”}]

    # 得到:87select content->'$.score[2]' from test_json where id = 1;# 结果:+-----------------------+| content->'$.score[2]' |+-----------------------+| 87                    |+-----------------------+# 得到:18select content->'$[3].age' from test_json where id = 2;# 结果:+---------------------+| content->'$[3].age' |+---------------------+| 18                  |+---------------------+

    四、渐入佳境

    - 获取JSON多个路径的数据

    将会把多个路径的数据组合成数组返回

    content: id=1
    {“age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “长沙”, “province”: “湖南”}}

    select json_extract(content,'$.age','$.score') from test_json where id = 1;# 结果:+-----------------------------------------+| json_extract(content,'$.age','$.score') |+-----------------------------------------+| [18, [100, 90, 87]]                     |+-----------------------------------------+select json_extract(content,'$.name','$.address.province','$.address.city') from test_json where id = 1;# 结果:+----------------------------------------------------------------------+| json_extract(content,'$.name','$.address.province','$.address.city') |+----------------------------------------------------------------------+| ["tom", "湖南", "长沙"]                                              |+----------------------------------------------------------------------+

    - 路径表达式*的使用

    将会把多个路径的数据组合成数组返回

    # 先插入一条用于测试的数据INSERT INTO `test_json` (`id`,`content`) VALUES(3,'{"name":"tom","address":{"name":"中央公园","city":"长沙"},"class":{"id":3,"name":"一年三班"},"friend":[{"age":20,"name":"marry"},{"age":21,"name":"Bob"}]}')

    content: id=3
    {“name”: “tom”, “class”: {“id”: 3, “name”: “一年三班”}, “friend”: [{“age”: 20, “name”: “marry”}, {“age”: 21, “name”: “Bob”}], “address”: {“city”: “长沙”, “name”: “中央公园”}}

    # 获取所有二级嵌套中key=name的值# 由于friend的二级嵌套是一个数组,所以.name获取不到其中的所有name值select content->'$.*.name' from test_json where id = 3;+----------------------------------+| content->'$.*.name'              |+----------------------------------+| ["一年三班", "中央公园"]         |+----------------------------------+```# 获取所有key为name值的数据,包括任何嵌套内的nameselect content->'$**.name' from test_json where id = 3;+---------------------------------------------------------+| content->'$**.name'                                     |+---------------------------------------------------------+| ["tom", "一年三班", "marry", "Bob", "中央公园"]         |+---------------------------------------------------------+# 获取数组中所有的name值select content->'$.friend[*].name' from test_json where id = 3;+-----------------------------+| content->'$.friend[*].name' |+-----------------------------+| ["marry", "Bob"]            |+-----------------------------+

    - 返回NULL值

    content: id=1
    {“age”: 18, “name”: “tom”, “score”: [100, 90, 87], “address”: {“city”: “长沙”, “province”: “湖南”}}

    寻找的JSON路径都不存在

    # age路径不存在,返回NULL# 若有多个路径,只要有一个路径存在则不会返回NULLselect json_extract(content,'$.price') from test_json where id = 1;+---------------------------------+| json_extract(content,'$.price') |+---------------------------------+| NULL                            |+---------------------------------+

    路径中有NULL

    # 存在任意路径为NULL则返回NULLselect json_extract(content,'$.age',NULL) from test_json where id = 1;+------------------------------------+| json_extract(content,'$.age',NULL) |+------------------------------------+| NULL                               |+------------------------------------+

    - 返回错误

    若第一个参数不是JSON类型的数据,则返回错误

    select json_extract('{1,2]',$[0])

    若路径表达式不规范,则返回错误

    select content->'$age' from test_json where id = 1;# 结果:ERROR 3143 (42000): Invalid JSON path expression. The error is around character position 1.

    五、使用场景

    JSON_EXTRACT函数通常用于要获取JSON中某个特定的数据或者要根据它作为判断条件时使用

    到此,关于“mysql中的json_extract怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    mysql中的json_extract怎么使用

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    mysql中的json_extract怎么使用

    这篇文章主要介绍“mysql中的json_extract怎么使用”,在日常操作中,相信很多人在mysql中的json_extract怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的json
    2023-07-06

    mysql中json_extract的使用方法

    文章目录 一、前言二、创建示例表三、基本语法- 获取JSON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据 四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回
    2023-08-17

    MySQL中json_extract()函数的使用实例

    目录mysql中json_extract()函数的使用一、初始化二、执行json_extract()MySql中json_extract函数的一个特殊之处在MySql中,是这样的而在Oracle中,是这样的MySQL中json_extrac
    2022-07-05

    mysql中json_extract的使用方法实例详解

    目录一、前言二、创建示例表三、基本语法- 获取jsON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回NULL值- 返回错误
    2023-04-13

    MySql中怎么使用json_extract函数处理json字段

    这篇“MySql中怎么使用json_extract函数处理json字段”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySq
    2023-06-30

    mysql 如何使用JSON_EXTRACT() 取json值

    目录mysql取json字符串字段下的某个键的值1.使用replace()做替换2.使用 JSON_UNQUOTE()mysql处理json字符串,JSON_EXTRACT()提取内容MySQL自5.7之后开始支持json类型mysql取j
    2022-07-05

    关于mysql中的json解析函数JSON_EXTRACT

    目录mysql json解析函数JSON_EXTRACT例子mysql5.7 json格式与json_extract方法数据初始化select语句返回结果解析用法解析mysql json解析函数JSON_EXTRACTMYSQl自带的解析
    2022-07-05

    MySQL中的substring怎么使用

    在MySQL中,substring函数可以用来提取一个字符串的子字符串。它的语法如下:SUBSTRING(string, start, length)其中:string 是要提取子字符串的原始字符串。start 是子字符串的起始位置(从
    MySQL中的substring怎么使用
    2024-04-28

    MySQL中的ibdata1怎么使用

    本篇内容主要讲解“MySQL中的ibdata1怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的ibdata1怎么使用”吧!MySQL的ibdata1用法系统表空间是InnoD
    2023-07-05

    mysql中的separator怎么使用

    在MySQL中,`separator`是一个用于设置输出结果的分隔符的命令。它可以在查询结果中插入自定义的分隔符,以改变结果的显示方式。下面是使用`separator`的一些示例:1. 设置列分隔符:```sqlseparator ','S
    2023-08-30

    mysql中的replace怎么使用

    在MySQL中,REPLACE语句用于替换表中的数据。它的语法如下:REPLACE INTO table_name (column1, column2, ...)VALUES (value1, value2, ...);这条语句会首先尝
    mysql中的replace怎么使用
    2024-04-09

    编程热搜

    目录