mysql json类型数据查询(+判空、类型踩坑) 您所在的位置:网站首页 sql查询为空 mysql json类型数据查询(+判空、类型踩坑)

mysql json类型数据查询(+判空、类型踩坑)

2024-01-11 17:41| 来源: 网络整理| 查看: 265

mysql中json类型数据查询 查询返回所有包含键值对 {"key": "value"} 的JSON对象根据json中对象的值来查询数据

查询返回所有包含键值对 {“key”: “value”} 的JSON对象

用json_contains函数查询json包含某特定键值对的数据. 例如,假设有一个名为 json_data 的表,其中包含一个名为 data 的JSON类型列,可以使用以下查询来检索包含特定键值的JSON数据::

\\data { "name": "John", "age": 30, "address": { "city": "New York", "state": null } } //查询json中包含某一键值对的数据 select * from json_data where json_contains(data,'{"name": "John"}'); select * from json_data where json_contains(data,'{"age": 30}'); 根据json中对象的值来查询数据

可以使用 -> 或 ->> 运算符从JSON对象中提取值。 **注意: ->返回一个 JSON 类型的值,这意味着可以继续使用 JSON 相关的函数和操作符来处理返回的结果,比如可以使用 -> 来获取 JSON 对象的属性值(eg.data->‘$.address.state’)。这里address是从data中取出的json类型属性,用->提取的仍返回json类型,因此可以继续从address中取出state属性。 ** ->>返回一个字符串类型的值,这意味着不能再使用 JSON 相关的函数和操作符来处理返回的结果,比如不能再使用 -> 来获取 JSON 对象的属性值。但是可以直接对返回的字符串进行字符串函数的操作。

//各类型键值对对应的值 select data->'$.name',data->>'$.name', data->'$.age',data->>'$.age' from json_data;

在这里插入图片描述 对比name属性可以看出,->提取的键值返回的就是json中的类型(在这里是字符串),而->>提取的键值被转换成mysql的字符串.下面是对比它们的用法区别:

1.select * from json_data where data->'$.age' = 30; 2.select * from json_data where data->>'$.age' = 30; 3.select * from json_data where data->'$.age' = '30'; 4.select * from json_data where data->>'$.age' = '30'; 5.select * from json_data where data->'$.name' = 'John'; 6.select * from json_data where data->>'$.name' = 'John';

在这里插入图片描述

结果仅有3的查询结果为空,因为data->'$.age'得到的值是根据在json中的格式(此处应是整型),所以判断='30’结果不匹配。

然后坑就来了 假如要查询键值为null或者不为null的数据,用以下查询语句:

select * from json_data where data->'$.address.state' is not null;

在这里插入图片描述

表数据很简单,按理说上面的查询语句结果应该为空.但实际上: 在这里插入图片描述 查出来了。。。 语句换成以下

select * from json_data where data->>'$.address.state' is not null;

结果依然不为空。 解决: 理解上述->和->>的区别再结合一个很重要的小知识mysql中的null用于表示缺少值或未知值。它不等于空字符串、0或任何其他值。 因此json中的null并不ismysql中的null。所以需要把键值转换为字符串再作比较:

//->>'$.{}'得到的值会被转换成字符串,即可与'null'做比较判断 select * from json_data where data->>'$.address.state' != 'null';


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有