`

【MySQL】处理 JSON 的内建方法(函数)

 
阅读更多

概览

注:MySQL版本不同,所支持的方法也会有所差异。此文中部分方法需MySQL 8

 

创建JSON数据

 

 

搜索JSON数据内容

 

 

修改JSON数据



 

查看JSON数据属性



 

将JSON数据转换成关系型表



 

其它JSON方法




详述

JSON_ARRAY

创建一个JSON数组

JSON_ARRAY([val[, val] ...])

select JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME());
+---------------------------------------------+
| JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) |
+---------------------------------------------+
| [1, "abc", null, true, "10:00:24.000000"]   |
+---------------------------------------------+

 

 

JSON_OBJECT

创建一个JSON对象

JSON_OBJECT([key, val[, key, val] ...])

select JSON_OBJECT('id', '1047', 'name', 'Author');
+---------------------------------------------+
| JSON_OBJECT('id', '1047', 'name', 'Author') |
+---------------------------------------------+
| {"id": "1047", "name": "Author"}            |
+---------------------------------------------+

 

 

JSON_QUOTE

通过在一个字符串两端添加引号并对内部特殊字符进行转义得到一个JSON数据

JSON_QUOTE(string)

 

select JSON_QUOTE('null'), JSON_QUOTE('"null"');
+--------------------+----------------------+
| JSON_QUOTE('null') | JSON_QUOTE('"null"') |
+--------------------+----------------------+
| "null"             | "\"null\""           |
+--------------------+----------------------+

 

转义字符表



 

JSON_UNQUOTE

JSON_QUOTE的反向操作

JSON_UNQUOTE(json_val)

 

select JSON_UNQUOTE('"abc"');
+-----------------------+
| JSON_UNQUOTE('"abc"') |
+-----------------------+
| abc                   |
+-----------------------+

 

 

JSON_CONTAINS

判断JSON数据中指定路径(path)的值是否与指定的值相等

JSON_CONTAINS(target, candidate[, path])

 

select JSON_CONTAINS('{"a":1}', '1', '$.a');
+--------------------------------------+
| JSON_CONTAINS('{"a":1}', '1', '$.a') |
+--------------------------------------+
|                                    1 |
+--------------------------------------+

 

select JSON_CONTAINS('{"a":1}', '0', '$.a');
+--------------------------------------+
| JSON_CONTAINS('{"a":1}', '0', '$.a') |
+--------------------------------------+
|                                    0 |
+--------------------------------------+

 

select JSON_CONTAINS('{"x":{"f1":"f"}}', '{"f1":"f"}', '$.x');
+--------------------------------------------------------+
| JSON_CONTAINS('{"x":{"f1":"f"}}', '{"f1":"f"}', '$.x') |
+--------------------------------------------------------+
|                                                      1 |
+--------------------------------------------------------+

 

 

JSON_CONTAINS_PATH

判断JSON数据是否存在指定的路径(path)

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)

 

select JSON_CONTAINS_PATH('{"a":1}', 'one', '$.a', '$.b');
+----------------------------------------------------+
| JSON_CONTAINS_PATH('{"a":1}', 'one', '$.a', '$.b') |
+----------------------------------------------------+
|                                                  1 |
+----------------------------------------------------+

 

select JSON_CONTAINS_PATH('{"a":1}', 'all', '$.a', '$.b');
+----------------------------------------------------+
| JSON_CONTAINS_PATH('{"a":1}', 'all', '$.a', '$.b') |
+----------------------------------------------------+
|                                                  0 |
+----------------------------------------------------+

 

 

JSON_EXTRACT

获取JSON数据中指定路径(path)的内容

JSON_EXTRACT(json_doc, path[, path] ...)

 

select JSON_EXTRACT('[1,2]', '$[0]');
+-------------------------------+
| JSON_EXTRACT('[1,2]', '$[0]') |
+-------------------------------+
| 1                             |
+-------------------------------+

 

 

->

简易版的JSON_EXTRACT

column->path

 

select f2, f2->'$.a' from t1;
+------------------+-----------+
| f2               | f2->'$.a' |
+------------------+-----------+
| {"a": 1, "b": 2} | 1         |
+------------------+-----------+

 

 

->>

column->>path

这三者等价:

  • JSON_UNQUOTE(JSON_EXTRACT(column, path))
  • JSON_UNQUOTE(column -> path)
  • column -> path

 

 

JSON_KEYS

获取JSON数据中的key

JSON_KEYS(json_doc[, path])

 

select JSON_KEYS('{"a":1, "b":2}');
+-----------------------------+
| JSON_KEYS('{"a":1, "b":2}') |
+-----------------------------+
| ["a", "b"]                  |
+-----------------------------+

 

JSON_SEARCH

搜索JSON数据中指定JSON值的路径(path)

JSON_SEARCH(json_doc, one_or_all, search_str[, escape_char[, path] ...])

 

select JSON_SEARCH('["a", {"f":"a"}]', 'one', 'a');
+---------------------------------------------+
| JSON_SEARCH('["a", {"f":"a"}]', 'one', 'a') |
+---------------------------------------------+
| "$[0]"                                      |
+---------------------------------------------+

 

select JSON_SEARCH('["a", {"f":"1ab2"}]', 'all', '%a%');
+---------------------------------------------+
| JSON_SEARCH('["a", {"f":"1ab2"}]', 'all', '%a%') |
+---------------------------------------------+
| ["$[0]", "$[1].f"]                          |
+---------------------------------------------+

 

 

JSON_ARRAY_APPEND

在JSON数组最后增加一项数据

JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)

 

select JSON_ARRAY_APPEND('[1,[2]]', '$[1]', 3);
+-----------------------------------------+
| JSON_ARRAY_APPEND('[1,[2]]', '$[1]', 3) |
+-----------------------------------------+
| [1, [2, 3]]                             |
+-----------------------------------------+

 

 

JSON_ARRAY_INSERT

向JSON数组插入一项数据

JSON_ARRAY_INSERT(json_doc, path, val[, path, val] ...)

 

select JSON_ARRAY_INSERT('[1,[2]]', '$[1]', 3);
+-----------------------------------------+
| JSON_ARRAY_INSERT('[1,[2]]', '$[1]', 3) |
+-----------------------------------------+
| [1, 3, [2]]                             |
+-----------------------------------------+
 

 

 

JSON_INSERT

向JSON文档插入一项数据

JSON_INSERT(json_doc, path, val[, path, val] ...)

 

select JSON_INSERT('{}', '$.a', 3);
+-----------------------------+
| JSON_INSERT('{}', '$.a', 3) |
+-----------------------------+
| {"a": 3}                    |
+-----------------------------+
 

 

 

JSON_MERGE

合并JSON文档。MySQL 5.7.22 中,该方法已被废弃

JSON_MERGE(json_doc, json_doc[, json_doc] ...)

 

 

JSON_MERGE_PATCH

合并JSON文档。如果key已存在,将替换原值

JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)

 

 

JSON_MERGE_PRESERVE

合并JSON文档。如果key已存在,会合并原值和新值

JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)

 

set @x = '{"a": 1, "b": 2}',
      @y = '{"a": 3, "c": 4}',
      @z = '{"a": 5, "d": 6}';

select JSON_MERGE_PATCH(@x, @y, @z) AS Patch,
          JSON_MERGE_PRESERVE(@x, @y, @x) AS Preserve;
+-------------------------------+------------------------------------------+
| Patch                         | Preserve                                 |
+-------------------------------+------------------------------------------+
| {"a":5, "b":2, "c":4, "d": 6} | {"a": [1, 3, 5], "b": 2, "c": 4, "d": 6} |
+-------------------------------+------------------------------------------+

 

 

JSON_REMOVE

移除JSON文档中的数据

JSON_REMOVE(json_doc, path[, path] ...)

 

select JSON_REMOVE('[1, 2, 3]', '$[1]');
+----------------------------------+
| JSON_REMOVE('[1, 2, 3]', '$[1]') |
+----------------------------------+
| [1, 3]                           |
+----------------------------------+
 

 

 

JSON_REPLACE

替换JSON文档中的数据

JSON_REPLACE(json_doc, path, val[, path, val] ...)

 

select JSON_REPLACE('[1, 2, 3]', '$[1]', 'two');
+------------------------------------------+
| JSON_REPLACE('[1, 2, 3]', '$[1]', 'two') |
+------------------------------------------+
| [1, "two", 3]                            |
+------------------------------------------+

 

 

JSON_SET

更新JSON文档中的数据;如果key不存在,则插入新数据

JSON_SET(json_doc, path, val[, path, val] ...)

select JSON_SET('{"a":1}', '$.a', 'one', '$.b', 2);
+---------------------------------------------+
| JSON_SET('{"a":1}', '$.a', 'one', '$.b', 2) |
+---------------------------------------------+
| {"a": "one", "b": 2}                        |
+---------------------------------------------+

 

 

JSON_DEPTH

获取JSON文档的最大深度

JSON_DEPTH(json_doc)

select f2, JSON_DEPTH(f2) from t1;
+----------+----------------+
| f2       | JSON_DEPTH(f2) |
+----------+----------------+
| NULL     |           NULL |
| []       |              1 |
| [1]      |              2 |
| [1, []]  |              2 |
| [1, [2]] |              3 |
+----------+----------------+

 

 

JSON_LENGTH

获取JSON文档的(一级)数据项数量

JSON_LENGTH(json_doc[, pathj])

select f2, JSON_LENGTH(f2) from t1;
+-------------+-----------------+
| f2          | JSON_LENGTH(f2) |
+-------------+-----------------+
| NULL        |            NULL |
| []          |               0 |
| [1]         |               1 |
| [1, []]     |               2 |
| [1, [2]]    |               2 |
| [1, [2, 3]] |               2 |
+-------------+-----------------+

 

JSON_TYPE

查看JSON值的类型

JSON_TYPE(json_val)

select f2, JSON_TYPE(f2) from t1;
+------------------------------+---------------+
| f2                           | JSON_TYPE(f2) |
+------------------------------+---------------+
| NULL                         | NULL          |
| "xyz"                        | STRING        |
| 123                          | INTEGER       |
| 3.14                         | DECIMAL       |
| "2018-09-20 15:22:40.000000" | DATETIME      |
| {"a": 1}                     | OBJECT        |
| [1, "two"]                   | ARRAY         |
+------------------------------+---------------+

 

 

JSON_VALID

检查一个JSON值是否有效

JSON_VALID(val)

select f1, JSON_VALID(f1) from t1;
+------+----------------+
| f1   | JSON_VALID(f1) |
+------+----------------+
| a    |              0 |
| "a"  |              1 |
| []   |              1 |
| {}   |              1 |
| NULL |           NULL |
+------+----------------+

 

JSON_TABLE

将JSON数据转换成一个关系型表

JSON_TABLE(expr, path, COLUMNS (column_list) [AS] alias)

SELECT *
    FROM
        JSON_TABLE(
            '[{"x":2,"y":"8"},{"x":"3","y":"7"},{"x":"4","y":6}]',
            "$[*]" COLUMNS(
                xval VARCHAR(100) PATH "$.x",
                yval VARCHAR(100) PATH "$.y"
            )
        ) AS  jt1;
+------+------+
| xval | yval |
+------+------+
| 2    | 8    |
| 3    | 7    |
| 4    | 6    |
+------+------+

 

JSON_PRETTY

将JSON文档输出成易于阅读的格式

JSON_PRETTY(json_val)

SELECT JSON_PRETTY('{"a":"10","b":"15","x":"25"}');
+---------------------------------------------+
| JSON_PRETTY('{"a":"10","b":"15","x":"25"}') |
+---------------------------------------------+
| {
  "a": "10",
  "b": "15",
  "x": "25"
}   |
+---------------------------------------------+

 

JSON_STORAGE_FREE

获取JSON字段在当前存储块中的剩余可用空间

JSON_STORAGE_FREE(json_val)

 

JSON_STORAGE_SIZE

获取JSON字段所占用的存储空间(包括未真正使用的空间)

JSON_STORAGE_SIZE(json_val)

 

 

JSON路径(path)语法:《JSON Path Syntax

更多JSON方法:JSON_ARRAYAGGJSON_OBJECTAGGST_AsGeoJSONST_GeomFromGeoJSON

  • 大小: 31.9 KB
  • 大小: 65.4 KB
  • 大小: 27.5 KB
  • 大小: 11.8 KB
  • 大小: 36.1 KB
  • 大小: 21 KB
  • 大小: 83.9 KB
分享到:
评论

相关推荐

    ThinkPHP6.0以上兼容mysql下JSON_CONTAINS使用

    本篇将详细探讨在ThinkPHP6.0及以上版本中,如何有效地利用MySQL的`JSON_CONTAINS`函数处理JSON类型的数据。 一、MySQL的JSON类型与JSON_CONTAINS函数 MySQL自5.7版本开始引入了对JSON数据类型的原生支持,这使得...

    mysql_json_JPAmysqljson_mysqljsonjpa_MYSQL_mysql支持json_

    MySQL提供了丰富的JSON函数,如`JSON_EXTRACT`用于获取JSON对象的值,`JSON_INSERT`和`JSON_REPLACE`用于修改JSON文档,`JSON_ARRAY`和`JSON_OBJECT`用于创建JSON数组和对象等。这些函数使你在SQL查询中直接操作JSON...

    mysql一个插件json

    在MySQL中,处理JSON数据的能力是通过特定的功能和函数来实现的。当标准的MySQL功能无法满足特定的JSON操作需求时,插件就显得尤为重要。标题中的"mysql一个插件json"指的是专门为MySQL设计的一个JSON插件,旨在增强...

    mysql5.7支持json数据的增删改查的例子

    MySQL 5.7版本引入了对JSON数据类型的官方支持,这是一个重要的里程碑,因为它标志着关系型数据库开始更加灵活地处理非结构化数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务和...

    mysql navicat premium,最新版本,支持mysql5.7 json格式数据,解压即可直接使用

    此外,还提供了丰富的JSON函数,如`JSON_EXTRACT`用于获取JSON对象中的值,`JSON_INSERT`、`JSON_REPLACE`和`JSON_REMOVE`用于修改JSON文档,以及`JSON_SEARCH`用于在JSON文档中查找特定值。 Navicat Premium的JSON...

    MySQL.and.JSON

    MySQL 和 JSON 在现代数据处理中扮演着至关重要的角色。MySQL 是全球最受欢迎的关系型数据库管理系统(RDBMS),而 JSON(JavaScript Object Notation)是广泛使用的轻量级数据交换格式。两者结合,使得在数据库中...

    JSqlParser4.3版本作者补丁版用于解析mysql中JSON_OBJECT函数抛出ParseException异常

    用于JSqlParser4.3版本解析mysql中JSON_OBJECT函数抛出ParseException异常问题,如下: // this is true SELECT JSON_OBJECT(key person value account,key personName value account_name) obj FROM tb_review_...

    spring-mybatis-mysql-json

    在MySQL中,JSON列可以存储任何有效的JSON文档,提供了对JSON数据的索引支持,以及一系列内置函数进行查询和更新操作。例如,`->`操作符用于访问JSON对象的属性,`JSON_EXTRACT`函数用于提取JSON对象的值,而`JSON_...

    JSqlparser4.4版作者提供的应急版,解决无法解析mysql中JSON_OBJECT函数存在其它函数问题

    如下sql,JSON_OBJECT函数中存在CAST函数,随后报出ParseException问题! SELECT JSON_ARRAYAGG(obj) FROM (SELECT trt.relevance_id,JSON_OBJECT('id',CAST(trt.id AS CHAR),'taskName',trt.task_name,'openStatus'...

    Mysql 查询JSON结果的相关函数汇总

    JSON 格式字段是 Mysql 5.7 新加的属性,不够它本质上以字符串性质保存在库中的,刚接触时我只了解 $.xx 查询字段的方法,因为大部分时间,有这个就够了,其他交给程序就行了,但是最近一些操作需要更复杂的查询操作...

    PHP MYSQL 查询汉字jsonencode处理

    它是PHP内建的一个函数,用于将PHP值转化为符合JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当PHP与MySQL结合时,我们经常需要...

    mysql5.6官网内置函数

    - JSON_*() 函数:MySQL 5.6开始支持JSON数据类型,提供了JSON相关的处理函数。 在实际应用中,理解并熟练使用这些内置函数可以显著提高查询效率,简化代码,增强数据库功能。MySQL 5.6的官方文档,如`refman-5.6-...

    用Python将mysql数据导出成json的方法

    标题中的“用Python将mysql数据导出成json的方法”指的是使用Python编程语言,结合相关库,将MySQL数据库中的数据转换并保存为JSON格式的文件。这个过程通常在数据分析、数据迁移或者API接口开发等场景中非常有用。...

    Mysql Json 检索函数 原代码

    自宝义函数json_searchvalue,从给定的JSON值中,根据给定的Key,检索出需要Value,

    MySQL数据生成JSON数据

    3. MySQL中的JSON函数,如`JSON_ARRAY()`、`JSON_OBJECT()`和`JSON_ARRAYAGG()`,用于创建和操作JSON数据。 4. 将查询结果转换为JSON格式,并可能涉及将数据输出到文件或屏幕。 在实际应用中,这个过程可能需要结合...

    MySql+JsonNet开发工具包.zip

    2. **JSON操作函数**:讲解如何使用MySQL提供的JSON函数,如`JSON_EXTRACT`用于获取JSON对象的值,`JSON_INSERT`用于插入新值,`JSON_REPLACE`用于替换值,以及`JSON_ARRAY`和`JSON_OBJECT`用于创建数组和对象等。...

    lib_mysqludf_json-master.zip

    `lib_mysqludf_json`是开源社区开发的一个扩展,它允许MySQL服务器处理JSON数据类型,提供了一系列函数来创建、解析、修改和查询JSON文档。这个库特别适用于那些需要在MySQL中进行复杂JSON操作的场景,比如Web服务、...

    mysql(5.6及以下)解析json的方法实例详解

    在MySQL 5.6及以下版本中,JSON数据类型的处理相对较弱,没有提供像5.7...随着MySQL版本的更新,对于JSON数据的支持也在不断增强,如JSON数据类型、JSON函数等,使得在数据库层面对JSON数据的操作变得更加高效和便捷。

    详解Mysql中的JSON系列操作函数

    在MySQL 5.7版本之后,数据库系统引入了对JSON数据类型的支持,使得处理JSON文档变得更加方便。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,由于其简洁、易读、易写的特点,被广泛应用于Web...

    Mysql5.7中JSON操作函数使用说明

    通过这些函数,MySQL 5.7 提供了强大的 JSON 支持,使得开发者可以在数据库层面直接进行 JSON 数据的操作,提高了数据处理的灵活性和效率。在实际应用中,结合 JSON_PATH 和相关函数,可以实现复杂的数据查询和更新...

Global site tag (gtag.js) - Google Analytics