2017-10-13 1 views

Antwort

0

Wenn Sie erwarten, diese (ungewöhnliche) Art von Vergleich zu benötigen, bauen Sie den JSON auf eine kanonische Weise auf, bevor Sie ihn speichern. Der einfachste Weg für ein einfaches JSON wie Ihres ist es, die Schlüssel zu alphabetisieren. Wie das geht, hängt von der "encode" -Bibliothek ab, die Sie für JSON verwenden.

1

Verwenden Sie einfach JSON_EXTRACT, JSON_EXTRACT kümmert sich nicht um die Position einer Ziffer in einer JSON-Zeichenfolge.

Abfrage

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 

Ergebnis

a1  a2  b1  b2  
------ ------ ------ -------- 
2  2  1  1  

nun dieses Ergebnis als gelieferte Tabelle verwenden, so können wir überprüfen, ob a1 bis a2 und b1 gleich ist, gleich b2.

Abfrage

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 

Ergebnis

json_equal 
------------ 
      1