比较MariaDB中的JSON值

问题描述:

如何在MariaDB中比较两个JSON值?应该使用两个值,例如 {"b":1,"a":2} {"a":2,"b":1} 等于.MariaDB是否包含用于对JSON值的元素进行重新排序的函数?

How can I compare two JSON values in MariaDB? Two values such as {"b": 1, "a": 2} and {"a": 2, "b": 1} should be equal. Does MariaDB contain function to reorder elements of a JSON value?

仅使用JSON_EXTRACT,JSON_EXTRACT并不关心JSON字符串中数字的位置.

Just use JSON_EXTRACT, JSON_EXTRACT doesnt care about the position of a digit within a JSON string.

查询

  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.

Now use this result as delivered table so we can check if a1 is equal to a2 and b1 is equal to 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