我将 JSON 数组作为字符串存储在 MariaDB 表中。当数组中的任何位置存在某些键值时,我想返回行。
我进行了以下测试....
set @json='[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]'
Run Code Online (Sandbox Code Playgroud)
执行以下查询...
select json_value(@json,'$[0].name')='Albert'
Run Code Online (Sandbox Code Playgroud)
它让我得到了想要的结果,那就是......
1
Run Code Online (Sandbox Code Playgroud)
甚至下面的查询也给了我相同的结果(可能是 '*' 被视为第一个元素)...
select json_value(@json,'$[*].name')='Albert'
Run Code Online (Sandbox Code Playgroud)
但是当我在条件中提供第二个名字(“约翰”)时,我没有得到任何结果......
select json_value(@json,'$[*].name')='John'
Run Code Online (Sandbox Code Playgroud)
结果...
0
Run Code Online (Sandbox Code Playgroud)
所以我的观察是,当我们提供数组索引时,“json_value”函数能够返回所需的结果。
有没有办法可以避免指定数组索引并搜索所需的键值?
正如@dbfiddle 所评论的,我尝试使用JSON_SEARCH函数。
这是我试图获得所需结果的方法。
create table label_test(labels VARCHAR(1000));
insert into label_test values ('[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]');
select * from label_test where JSON_SEARCH(labels,'all','John') like '"$[%].name"';
Run Code Online (Sandbox Code Playgroud)
结果是预期的整行。
[{"name":"Albert","state":"IL"},{"name":"John","state":"CA"}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4219 次 |
| 最近记录: |