比较MariaDB

时间:2017-10-13 16:47:28

标签: json mariadb

如何比较MariaDB中的两个JSON值?两个值,例如' {" b":1," a":2}'和' {" a":2," b":1}'应该是平等的。 MariaDB是否包含重新排序JSON值元素的函数?

2 个答案:

答案 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的“编码”库。