返回顶部
首页 > 资讯 > 数据库 >mysql中的json_extract怎么使用
  • 123
分享到

mysql中的json_extract怎么使用

2023-07-06 02:07:25 123人浏览 八月长安
摘要

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

这篇文章主要介绍“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怎么使用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

    您可能感兴趣的文档:

    --结束END--

    本文标题: mysql中的json_extract怎么使用

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

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

    猜你喜欢
    • mysql中的json_extract怎么使用
      这篇文章主要介绍“mysql中的json_extract怎么使用”,在日常操作中,相信很多人在mysql中的json_extract怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中的json...
      99+
      2023-07-06
    • mysql中json_extract的使用方法
      文章目录 一、前言二、创建示例表三、基本语法- 获取JSON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据 四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回...
      99+
      2023-08-17
      json mysql
    • 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函数处理json字段
      这篇“MySql中怎么使用json_extract函数处理json字段”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“MySq...
      99+
      2023-06-30
    • mysql中json_extract的使用方法实例详解
      目录一、前言二、创建示例表三、基本语法- 获取jsON对象中某个key对应的value值- 获取JSON数组中某个元素- 获取JSON中的嵌套数据四、渐入佳境- 获取JSON多个路径的数据- 路径表达式*的使用- 返回N...
      99+
      2023-04-13
      mysql json_extract mysql json_extract 函数
    • 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函数说明及使用方式
      目录1. json_extract 使用场景说明2. MySQL json_extract 函数简介2.1 函数简介2.2 使用方式2.3 注意事项3. 数据验证3.1 提取普通js...
      99+
      2024-04-02
    • 关于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中的json_extract函数处理json字段详情
      目录前言1. 使用方式2. 使用演示3. 小结前言 在db中存储json格式的数据,相信大家都或多或少的使用过,那么在查询这个json结构中的数据时,有什么好的方法么?取出Strin...
      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中的explain怎么使用
      本篇内容介绍了“mysql中的explain怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • mysql中的separator怎么使用
      在MySQL中,`separator`是一个用于设置输出结果的分隔符的命令。它可以在查询结果中插入自定义的分隔符,以改变结果的显示方...
      99+
      2023-08-30
      mysql separator
    • MySQL中的ibdata1怎么使用
      本篇内容主要讲解“MySQL中的ibdata1怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL中的ibdata1怎么使用”吧!MySQL的ibdata1用法系统表空间是InnoD...
      99+
      2023-07-05
    • mysql中的replace怎么使用
      在MySQL中,REPLACE语句用于替换表中的数据。它的语法如下: REPLACE INTO table_name (column...
      99+
      2024-04-09
      mysql
    • MySQL中的substring怎么使用
      在MySQL中,substring函数可以用来提取一个字符串的子字符串。它的语法如下: SUBSTRING(string, ...
      99+
      2024-04-28
      mysql
    • mysql中的limit怎么是使用
      这篇文章主要介绍“mysql中的limit怎么是使用”,在日常操作中,相信很多人在mysql中的limit怎么是使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql中...
      99+
      2024-04-02
    • mysql中的注释怎么使用
      本篇内容介绍了“mysql中的注释怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • mysql中not怎么使用
      本篇内容介绍了“mysql中not怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    • mysql中if怎么使用
      本篇内容介绍了“mysql中if怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作