我有一个像这样的 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_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 |