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
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐