sql >> データベース >  >> RDS >> Mysql

JSON_ARRAY_APPEND()–MySQLのJSON配列に値を追加します

    MySQLでJSONドキュメントを使用する場合は、JSON_ARRAY_APPEND()を使用できます。 配列に新しい値を追加する関数。

    それが機能する方法は、最初の引数としてJSONドキュメントを提供し、その後に追加するパスを続け、その後に追加する値を続けることです。

    MySQL 5.7では、この関数はJSON_APPEND()と呼ばれていました。 ただし、その名前はサポートされなくなりました。

    構文

    構文は次のようになります:

    JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
    

    場所:

    • json_doc JSONドキュメントです。
    • path 新しい値を追加する要素のパスです。
    • val 追加される新しい値です。

    パスと値のペアは左から右に評価されます。 1つのペアを評価することによって作成されたドキュメントは、次のペアが評価される新しい値になります。

    例1-基本的な使用法

    実例を示します。

    SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$', 4) AS 'Result';
    

    結果:

    +--------------+
    | Result       |
    +--------------+
    | [1, 2, 3, 4] |
    +--------------+
    

    したがって、3番目の引数が配列に追加されます。この場合、私は$を使用します パスのために。これはJSONドキュメントの同義語であるため、値は最上位の配列(この場合はたまたま唯一の配列)に追加されます。

    例2–ネストされた配列

    別の配列内にネストされている配列に値を追加する例を次に示します。

    SELECT JSON_ARRAY_APPEND('[1, 2, [3, 4]]', '$[2]', 5) AS 'Result';
    

    結果:

    +-------------------+
    | Result            |
    +-------------------+
    | [1, 2, [3, 4, 5]] |
    +-------------------+
    

    ここでは、$[2]を使用します パスとして。これは、3番目の要素の配列を指定します(配列はゼロベースの番号付けを使用するため、カウントはゼロから始まります)。

    その要素にまだ配列がない場合は、新しい配列が作成されます。

    このように:

    SELECT JSON_ARRAY_APPEND('[1, 2, 3]', '$[2]', 4) AS 'Result';
    

    結果:

    +----------------+
    | Result         |
    +----------------+
    | [1, 2, [3, 4]] |
    +----------------+
    

    例3–より大きなJSONドキュメント

    この例では、(少し)大きいJSONドキュメントを使用しています。これは、配列がドキュメント内のどこにあるかによってパスがどのように変化するかを示しています。

    SET @data = '{  
        "Person": {    
           "Name": "Homer", 
           "Hobbies": ["Eating", "Sleeping"]  
        }
     }';
    SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies', "Base Jumping") AS 'Result';
    

    結果:

    +----------------------------------------------------------------------------------+
    | Result                                                                           |
    +----------------------------------------------------------------------------------+
    | {"Person": {"Name": "Homer", "Hobbies": ["Eating", "Sleeping", "Base Jumping"]}} |
    +----------------------------------------------------------------------------------+
    

    また、前の例と同様に、必要に応じて、ネストされた新しい配列を作成することもできます。

    SET @data = '{  
        "Person": {    
           "Name": "Homer", 
           "Hobbies": ["Eating", "Sleeping"]  
        }
     }';
    SELECT JSON_ARRAY_APPEND(@data, '$.Person.Hobbies[0]', "Drinking") AS 'Result';
    

    結果:

    +--------------------------------------------------------------------------------+
    | Result                                                                         |
    +--------------------------------------------------------------------------------+
    | {"Person": {"Name": "Homer", "Hobbies": [["Eating", "Drinking"], "Sleeping"]}} |
    +--------------------------------------------------------------------------------+
    


    1. LAST_DAY()がMariaDBでどのように機能するか

    2. PostgreSQL関数/ストアドプロシージャCURRENT_TIMESTAMPは変更されません

    3. SQL Server(T-SQL)でのCURRENT_TIMESTAMPの例

    4. MySQLにデータを挿入するときの「エラー1136(21S01):列数が行1の値数と一致しない」を修正