MariaDB JSON:在任何子属性中包含特定值

问题描述 投票:0回答:1

我有一个像这样的 JSON:

{"a": {"z":true,"y":false}, "b": {"z":false,"y":false} }
。 我需要在 MariaDB 中获取此 JSON 中是否有任何(子)属性包含值“true”。

我在 SQL 中尝试了以下查询:

SET @json='{"a": {"z":true,"y":false}, "b": {"z":false,"y":false} }';
SELECT  JSON_CONTAINS(@json,'true'),
        JSON_CONTAINS(@json,'true','$.a'),
        JSON_CONTAINS(@json,'true','$.a.z');

但是前两个响应为 0(零),只有最后一个响应为 1。这意味着我可以分别检查 $.a.z 和 $.a.y 并通过案例获取其中任何一个是否为真。我希望还有其他方法可以实现这一目标吗?

json mariadb contains
1个回答
0
投票

JSON_CONTAINS
,不支持路径中的通配符,但
JSON_SEARCH
支持。

它也会支持 true% 并且有更多的可能性

SET @json='{"a": {"z":true,"y":false}, "b": {"z":false,"y":false} }';
SELECT JSON_SEARCH(@json, 'all', 'true', NULL, '$.b') IS NOT  NULL;
JSON_SEARCH(@json, 'all', 'true', NULL, '$.b') IS NOT NULL
0
SELECT JSON_SEARCH(@json, 'all', 'true', NULL, '$.a') IS NOT  NULL

JSON_SEARCH(@json, 'all', 'true', NULL, '$.a') IS NOT NULL
1

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.