Mysql json数组解析方法

Posted tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql json数组解析方法相关的知识,希望对你有一定的参考价值。

一、背景

在表job_position需要对json数组进行解析,查找json数组对象中的数据

 首先想到查找mysql的关于json的函数,这边做个记录。

二、解决方案

2.1 JSON_EXTRACT(json字段,\'$.属性名称\')

需要了解函数 JSON_EXTRACT(json_docpath[, path] ...) 

 从json中提取数据,JSON_EXTRACT(json字段,\'$.属性名称\'),解析正常则返回对应键的值,否则返回null值

比如(官方例子)

mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g
     > FROM jemp
     > WHERE JSON_EXTRACT(c, "$.id") > 1
     > ORDER BY JSON_EXTRACT(c, "$.name");
+-------------------------------+-----------+------+
| c                             | c->"$.id" | g    |
+-------------------------------+-----------+------+
| "id": "3", "name": "Barney" | "3"       |    3 |
| "id": "4", "name": "Betty"  | "4"       |    4 |
| "id": "2", "name": "Wilma"  | "2"       |    2 |
+-------------------------------+-----------+------+
3 rows in set (0.00 sec)

随便写的例子

SELECT JSON_EXTRACT(\'"name":"zhangsan","userCode":"oa123456"\',\'$.name\');

 那对于json数组的解析呢???

比如json数组 ["name":"zhangsan","userCode":"oa123456","name":"lisi","userCode":"oa222222"]

用上面的方式肯定不行

 ----------让我想想-----

2.2 JSON_EXTRACT(json数据, \'$[数组下标].json属性名称\')

使用 JSON_EXTRACT(json数据, \'$[数组下标].json属性名称\')

例子如下

SELECT JSON_EXTRACT(\' ["name":"zhangsan","userCode":"oa123456","name":"lisi","userCode":"oa222222"]\',\'$[0].name\') NAME;

 如果是 JSON_EXTRACT(json数据, \'$[*].json属性名称\') 则会返回数组

SELECT JSON_EXTRACT(\' ["name":"zhangsan","userCode":"oa123456","name":"lisi","userCode":"oa222222"]\',\'$[*].name\') NAME;

3.mysql中数组包含某个元素的方法

SELECT \'北京\' member of(\'["天津","北京"]\')

结果存在则返回1,否则返回0

 

 

查询某个城市是否包含在work_address 工作地点的json数组中

SELECT id,company_code,position_name,
JSON_EXTRACT(work_address,\'$[*].cityName\'),
JSON_EXTRACT(work_address,\'$[0].cityName\') AS work_address_city1,
JSON_EXTRACT(work_address,\'$[1].cityName\') AS work_address_city2,
work_address
FROM job_position WHERE \'北京市\' member of(JSON_EXTRACT(work_address,\'$[*].cityName\')); 

结果:

 关于mysql json解析的函数还有可以查看官方文档

比如

JSON_CONTAINS(json_doc, val[, path])  查询json是否包含某个元素

JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] ...)  查询是否存在指定路径,存在则返回1,否则返回0。

 ......

 

mysql官方json介绍文档:https://dev.mysql.com/doc/refman/5.7/en/json-search-functions.html

mysql json 方法

参考技术A 分类 函数 描述
创建json
json_array 创建json数组
json_object 创建json对象
json_quote 将json转成json字符串类型
查询json
json_contains 判断是否包含某个json值
json_contains_path 判断某个路径下是否包json值
json_extract 提取json值
column->path json_extract的简洁写法,MySQL 5.7.9开始支持
column->>path json_unquote(column -> path)的简洁写法
json_keys 提取json中的键值为json数组
json_search 按给定字符串关键字搜索json,返回匹配的路径
修改json
json_append 废弃,MySQL 5.7.9开始改名为json_array_append
json_array_append 末尾添加数组元素,如果原有值是数值或json对 象,则转成数组后,再添加元素
json_array_insert 插入数组元素
json_insert 插入值(插入新值,但不替换已经存在的旧值)
json_merge 合并json数组或对象
json_remove 删除json数据
json_replace 替换值(只替换已经存在的旧值)
json_set 设置值(替换旧值,并插入不存在的新值)
json_unquote 去除json字符串的引号,将值转成string类型
返回json属性
json_depth 返回json文档的最大深度
json_length 返回json文档的长度
json_type 返回json值得类型
json_valid 判断是否为合法json文档

以上是关于Mysql json数组解析方法的主要内容,如果未能解决你的问题,请参考以下文章

mysql5.7以下怎么解析json

php怎么将mysql查询的数组中 的(数字)字符串类型转为数字类型

mysql json字符串查询

解析复杂 JSON 数组的有效方法

C++下如何将json数据存入mysql数据库

将 swift 数组解析为有效的 json

(c)2006-2024 SYSTEM All Rights Reserved IT常识