返回顶部
首页 > 资讯 > 数据库 >mysql中json_extract的使用方法
  • 271
分享到

mysql中json_extract的使用方法

jsonmysql 2023-08-17 22:08:09 271人浏览 薄情痞子
摘要

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


一、前言

Mysql5.7版本开始支持JSON类型字段,本文详细介绍json_extract函数如何获取mysql中的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中某个特定的数据或者要根据它作为判断条件时使用

六、参考文档

mysql5.7官方文档
https://www.sjkjc.com/mysql-ref/json_extract

来源地址:https://blog.csdn.net/AJakey/article/details/128113607

您可能感兴趣的文档:

--结束END--

本文标题: mysql中json_extract的使用方法

本文链接: https://lsjlt.com/news/373345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql中json_extract的使用方法
    文章目录 一、前言二、创建示例表三、基本语法- 获取JSON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据 四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回...
    99+
    2023-08-17
    json mysql
  • mysql中json_extract的使用方法实例详解
    目录一、前言二、创建示例表三、基本语法- 获取jsON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回N...
    99+
    2023-04-13
    mysql json_extract mysql json_extract 函数
  • mysql中的json_extract怎么使用
    这篇文章主要介绍“mysql中的json_extract怎么使用”,在日常操作中,相信很多人在mysql中的json_extract怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的json...
    99+
    2023-07-06
  • MySQL中json_extract()函数的使用实例
    目录mysql中json_extract()函数的使用一、初始化二、执行json_extract()MySql中json_extract函数的一个特殊之处在MySql中,是这样的而在Oracle中,是这样的MySQL中j...
    99+
    2022-07-05
    MySQLjsonextract MySQL中json_extract() json_extract函数使用
  • MySQL中json_extract函数说明及使用方式
    目录1. json_extract 使用场景说明2. MySQL json_extract 函数简介2.1 函数简介2.2 使用方式2.3 注意事项3. 数据验证3.1 提取普通js...
    99+
    2024-04-02
  • Mysql使用函数json_extract处理Json类型数据的方法实例
    目录1. 需求概述2. json_extract简介2.1 函数简介2.2 使用方式2.3 注意事项3. 实现验证3.1 建表查询3.2 查询结果总结 1. 需求概述 业务开发中通常mysql数据库中某个字段会...
    99+
    2024-04-02
  • mysql 如何使用JSON_EXTRACT() 取json值
    目录mysql取json字符串字段下的某个键的值1.使用replace()做替换2.使用 JSON_UNQUOTE()mysql处理json字符串,JSON_EXTRACT()提取内容MySQL自5.7之后开始...
    99+
    2022-07-05
    mysql取json值 使用JSON_EXTRACT() JSON_EXTRACT取json值
  • mysql如何使用JSON_EXTRACT()取json值
    目录mysql取json字符串字段下的某个键的值1.使用replace()做替换2.使用 JSON_UNQUOTE()mysql处理json字符串,JSON_EXTRACT...
    99+
    2024-04-02
  • MySql中怎么使用json_extract函数处理json字段
    这篇“MySql中怎么使用json_extract函数处理json字段”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySq...
    99+
    2023-06-30
  • 关于mysql中的json解析函数JSON_EXTRACT
    目录mysql json解析函数JSON_EXTRACT例子mysql5.7 json格式与json_extract方法数据初始化select语句返回结果解析用法解析mysql json解析函数JSON_EXT...
    99+
    2022-07-05
    mysql的json解析函数 mysql的JSON_EXTRACT JSON_EXTRACT函数
  • mysql中limit的使用方法
    本篇文章为大家展示了mysql中limit的使用方法,代码简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。limit语法支持两个参数,offset和limit,前者表示偏移...
    99+
    2024-04-02
  • mysql中comment的使用方法
    小编给大家分享一下mysql中comment的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!在MySQL数据库中,字段或...
    99+
    2024-04-02
  • MySQL中mysqldump的使用方法
    本篇内容介绍了“MySQL中mysqldump的使用方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • MySql中的json_extract函数处理json字段详情
    目录前言1. 使用方式2. 使用演示3. 小结前言 在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出Strin...
    99+
    2024-04-02
  • MySQL中distinct的使用方法【转】
    一、基本使用 distinct一般是用来去除查询结果中的重复记录的,而且这个语句在select、insert、delete和update中只可以在select中使用,具体的语法如下: select distinct ex...
    99+
    2019-06-11
    MySQL中distinct的使用方法【转】
  • MySQL Workbench使用中的常见方法
    MySQL Workbench 是可视化数据库设计软件,为数据库管理员和开发人员提供了一整套可视化的数据库操作环境,主要功能有数据库设计与模型建立、SQL 开发(取代 MySQL Query Browser)、数据库管理(取代 MySQL ...
    99+
    2021-05-02
    MySQL Workbench使用中的常见方法 数据库入门 数据库基础教程
  • Mysql中Next-Key Lock的使用方法
    本文以Next-Key Lock为例,为大家分析Mysql中Next-Key Lock的使用方法,阅读完整文相信大家对Mysql中Next-Key Lock的使用方法有了一定的认识。连接与线程查看连接信息 ...
    99+
    2024-04-02
  • MySQL中if语句的使用方法
    这篇文章将为大家详细讲解有关MySQL中if语句的使用方法,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Mysql的if既可以作为表达式用,也可在存储过程中作为流程控制语...
    99+
    2024-04-02
  • MySQL中explain语句的使用方法
    小编给大家分享一下MySQL中explain语句的使用方法,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、概述在 MySQL 中,我们可以使用慢查询日志或者 s...
    99+
    2023-06-14
  • MySQL中binlog日志的使用方法
    这篇文章主要介绍MySQL中binlog日志的使用方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DML操作。通过binlog日...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作