MySQL-解析json字符串及JSON数组
MySQL从5.7开始支持对于JSON的的各种操作,本文基于MySQL5.7.35-log
版本演示。
查询MySQL版本的命令
select version();
JSON示例
以下为jSON串示例:
JSON对象
{
"id":1,
"name":"张三",
"age":18
}
JSON数组
[
{
"id":1,
"name":"张三",
"age":18
},
{
"id":2,
"name":"李四",
"age":20
},
{
"id":3,
"name":"王五",
"age":23
}
]
提取JSON的key
JSON_KEYS
函数用于提取JSON的key值,具体用法如下:
SELECT JSON_KEYS('{"id":1,"name":"张三","age":18}') AS `keys`;
结果:
提取JSON的值
JSON_EXTRACT
函数用于提取JSON的值,具体用法如下:
提取JSON对象,单个key的值
通过$.key
取单个值
SELECT JSON_EXTRACT('{"id":1,"name":"张三","age":18}', '$.name') AS `name`;
结果:
可以看到结果有引号,可以使用JSON_UNQUOTE
函数对单个结果进行去引号操作。
SELECT JSON_UNQUOTE(JSON_EXTRACT('{"id":1,"name":"张三","age":18}', '$.name')) AS `name`;
结果:
提取JSON对象,所有key的值
通过$.*
取所有值
SELECT JSON_EXTRACT('{"id":1,"name":"张三","age":18}', '$.*') AS `values`;
结果:
提取JSON数组的值
提取JSON数组值的方式与提取单个JSON对象值方式基本无异。只是取值上有所差别。
取值方式:数字表示索引,从0开始,*
表示所有。常用取值方式如下:
$[0] JSON数组第一个对象
$[*] JSON数组所有对象
$[0].key JSON数组第一个对象对应key的值
$[*].key JOSN数组所有对象,对应key的值
以取出JSON数组中name的所有值为例:
SELECT JSON_EXTRACT('[{"id":1,"name":"张三","age":18},{"id":2,"name":"李四","age":20},{"id":3,"name":"王五","age":23}]', '$[*].name') AS `names`;
结果:
(完)
纸上得来终觉浅,绝知此事要躬行。
转载自:https://juejin.cn/post/7065961095705395230