概览
注: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_ARRAYAGG、JSON_OBJECTAGG、ST_AsGeoJSON、ST_GeomFromGeoJSON
相关推荐
本篇将详细探讨在ThinkPHP6.0及以上版本中,如何有效地利用MySQL的`JSON_CONTAINS`函数处理JSON类型的数据。 一、MySQL的JSON类型与JSON_CONTAINS函数 MySQL自5.7版本开始引入了对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 5.7版本引入了对JSON数据类型的官方支持,这是一个重要的里程碑,因为它标志着关系型数据库开始更加灵活地处理非结构化数据。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web服务和...
此外,还提供了丰富的JSON函数,如`JSON_EXTRACT`用于获取JSON对象中的值,`JSON_INSERT`、`JSON_REPLACE`和`JSON_REMOVE`用于修改JSON文档,以及`JSON_SEARCH`用于在JSON文档中查找特定值。 Navicat Premium的JSON...
MySQL 和 JSON 在现代数据处理中扮演着至关重要的角色。MySQL 是全球最受欢迎的关系型数据库管理系统(RDBMS),而 JSON(JavaScript Object Notation)是广泛使用的轻量级数据交换格式。两者结合,使得在数据库中...
用于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_...
在MySQL中,JSON列可以存储任何有效的JSON文档,提供了对JSON数据的索引支持,以及一系列内置函数进行查询和更新操作。例如,`->`操作符用于访问JSON对象的属性,`JSON_EXTRACT`函数用于提取JSON对象的值,而`JSON_...
如下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'...
JSON 格式字段是 Mysql 5.7 新加的属性,不够它本质上以字符串性质保存在库中的,刚接触时我只了解 $.xx 查询字段的方法,因为大部分时间,有这个就够了,其他交给程序就行了,但是最近一些操作需要更复杂的查询操作...
它是PHP内建的一个函数,用于将PHP值转化为符合JSON格式的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。当PHP与MySQL结合时,我们经常需要...
- JSON_*() 函数:MySQL 5.6开始支持JSON数据类型,提供了JSON相关的处理函数。 在实际应用中,理解并熟练使用这些内置函数可以显著提高查询效率,简化代码,增强数据库功能。MySQL 5.6的官方文档,如`refman-5.6-...
标题中的“用Python将mysql数据导出成json的方法”指的是使用Python编程语言,结合相关库,将MySQL数据库中的数据转换并保存为JSON格式的文件。这个过程通常在数据分析、数据迁移或者API接口开发等场景中非常有用。...
自宝义函数json_searchvalue,从给定的JSON值中,根据给定的Key,检索出需要Value,
3. MySQL中的JSON函数,如`JSON_ARRAY()`、`JSON_OBJECT()`和`JSON_ARRAYAGG()`,用于创建和操作JSON数据。 4. 将查询结果转换为JSON格式,并可能涉及将数据输出到文件或屏幕。 在实际应用中,这个过程可能需要结合...
2. **JSON操作函数**:讲解如何使用MySQL提供的JSON函数,如`JSON_EXTRACT`用于获取JSON对象的值,`JSON_INSERT`用于插入新值,`JSON_REPLACE`用于替换值,以及`JSON_ARRAY`和`JSON_OBJECT`用于创建数组和对象等。...
`lib_mysqludf_json`是开源社区开发的一个扩展,它允许MySQL服务器处理JSON数据类型,提供了一系列函数来创建、解析、修改和查询JSON文档。这个库特别适用于那些需要在MySQL中进行复杂JSON操作的场景,比如Web服务、...
在MySQL 5.6及以下版本中,JSON数据类型的处理相对较弱,没有提供像5.7...随着MySQL版本的更新,对于JSON数据的支持也在不断增强,如JSON数据类型、JSON函数等,使得在数据库层面对JSON数据的操作变得更加高效和便捷。
在MySQL 5.7版本之后,数据库系统引入了对JSON数据类型的支持,使得处理JSON文档变得更加方便。JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,由于其简洁、易读、易写的特点,被广泛应用于Web...
通过这些函数,MySQL 5.7 提供了强大的 JSON 支持,使得开发者可以在数据库层面直接进行 JSON 数据的操作,提高了数据处理的灵活性和效率。在实际应用中,结合 JSON_PATH 和相关函数,可以实现复杂的数据查询和更新...