2017-10-13 55 views

回答

0

如果您希望需要此類(不常見)比較,請在存儲之前以某種規範方式構建JSON。像你這樣簡單的JSON的顯而易見的方式是按字母順序排列鍵。如何做到這一點將取決於您用於JSON的「編碼」庫。

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