mysql 的 jsonArray应用
1.本次项目用到了mysqljsonArray 用法但是出了一些问题,记录一下,以备日后查看
2. JSON ARRAY 相关函数
2.1JSON_ARRAY函数
生成json数组
SELECT JSON_ARRAY(1, "abc", NULL);
+---------------------------------------------+
| JSON_ARRAY(1, "abc", NULL) |
+---------------------------------------------+
| [1, "abc", null,] |
+---------------------------------------------+
2.2JSON_OBJECT函数
生成json对象
SELECT JSON_OBJECT('id', 87, 'name', 'carrot');
+-----------------------------------------+
| JSON_OBJECT('id', 87, 'name', 'carrot') |
+-----------------------------------------+
| {"id": 87, "name": "carrot"} |
+-----------------------------------------+
2.3 JSON_QUOTE 函数
取出 ’ 号
SELECT JSON_QUOTE('null'), JSON_QUOTE('"null"');
+--------------------+----------------------+
| JSON_QUOTE('null') | JSON_QUOTE('"null"') |
+--------------------+----------------------+
| "null" | "\"null\"" |
+--------------------+----------------------+
2.4 JSON_CONTAINS
查询json文档是否在指定path包含指定的数据,包含则返回1,否则返回0。如果有参数为NULL或path不存在,则返回NULL。
mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> SET @j2 = '1';
mysql> SELECT JSON_CONTAINS(@j, @j2, '$.a');
`+-------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+-------------------------------+
| 1 |
+-------------------------------+``
2.5 JSON_EXTRACT
从json文档里抽取数据。如果有参数有NULL或path不存在,则返回NULL。如果抽取出多个path,则返回的数据封闭在一个json array里。
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]');
+--------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |
+--------------------------------------------+
| 20 |
+--------------------------------------------+
mysql> SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');
+-----------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]') |
+-----------------------------------------------+
| [30, 40] |
+-----------------------------------------------+
2.6 JSON_REMOVE
移除指定路径的数据,如果某个路径不存在则略过此路径。如果有参数为NULL,则返回NULL。
mysql> SET @j = '["a", ["b", "c"], "d"]';
mysql> SELECT JSON_REMOVE(@j, '$[1]');
+-------------------------+
| JSON_REMOVE(@j, '$[1]') |
+-------------------------+
| ["a", "d"] |
+-------------------------+
2.7 JSON_VALID
判断val是否为有效的json格式,是为1,不是为0。如果参数为NUL,则返回NULL。
mysql> SELECT JSON_VALID('{"a": 1}');
+------------------------+
| JSON_VALID('{"a": 1}') |
+------------------------+
| 1 |
+------------------------+
本次测试的json 数据格式
[
{'tag_id': 'etOzvzVQAAAtV8WPGy1EWkM-I8fOI9LA',
'tag_name': '皮肤',
'group_name': '疾病标签',
'tag_type': '企业设置'}
]
但是因为 json中的数据是 单引号的 导致测试了很长时间
我要获取 tag_info
列中 tag_name 中的值
select
distinct REPLACE(
json_extract(
json_extract(REPLACE(tag_info, '\'', '"'), '$**.tag_name'),
'$[0]'
),
'"',
''
)
from table
where JSON_VALID(`tag_info`) = 0