如何比较MariaDB中的两个JSON值?两个值,例如' {" b":1," a":2}'和' {" a":2," b":1}'应该是平等的。 MariaDB是否包含重新排序JSON值元素的函数?
答案 0 :(得分:1)
只需使用JSON_EXTRACT,JSON_EXTRACT就不关心JSON字符串中数字的位置。
<强>查询强>
SELECT
JSON_EXTRACT(@json_string_1, '$.a') AS a1
, JSON_EXTRACT(@json_string_2, '$.a') AS a2
, JSON_EXTRACT(@json_string_1, '$.b') AS b1
, JSON_EXTRACT(@json_string_2, '$.b') AS b2
FROM (
SELECT
@json_string_1 := '{"b":1,"a":2}'
, @json_string_2 := '{"a":2,"b":1}'
)
AS
json_strings
<强>结果强>
a1 a2 b1 b2
------ ------ ------ --------
2 2 1 1
现在将此结果用作已传递的表,以便我们可以检查a1是否等于a2且b1是否等于b2。
<强>查询强>
SELECT
1 AS json_equal
FROM (
SELECT
JSON_EXTRACT(@json_string_1, '$.a') AS a1
, JSON_EXTRACT(@json_string_2, '$.a') AS a2
, JSON_EXTRACT(@json_string_1, '$.b') AS b1
, JSON_EXTRACT(@json_string_2, '$.b') AS b2
FROM (
SELECT
@json_string_1 := '{"b":1,"a":2}'
, @json_string_2 := '{"a":2,"b":1}'
)
AS
json_strings
)
AS json_data
WHERE
json_data.a1 = json_data.a2
AND
json_data.b1 = json_data.b2
<强>结果强>
json_equal
------------
1
答案 1 :(得分:0)
如果您希望进行这种(不常见的)比较,请在存储之前以某种规范方式构建JSON。像你这样的简单JSON的显而易见的方法是按字母顺序排列键。如何做到这将取决于您用于JSON的“编码”库。