MySQLでJSONドキュメントを使用する場合は、JSON_ARRAY_APPEND()を使用できます。 配列に新しい値を追加する関数。
それが機能する方法は、最初の引数としてJSONドキュメントを提供し、その後に追加するパスを続け、その後に追加する値を続けることです。
MySQL 5.7では、この関数はJSON_APPEND()と呼ばれていました。 ただし、その名前はサポートされなくなりました。
構文
構文は次のようになります:
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
場所:
-
json_docJSONドキュメントです。 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"]}} |
+--------------------------------------------------------------------------------+