MySQLでは、JSON_MERGE_PRESERVE()
関数は2つ以上のJSONドキュメントをマージし、結果を返します。
JSONドキュメントを引数として提供します。
この関数は、MySQL8.0.3でJSON_MERGE()
の同義語として追加されました。 ただし、JSON_MERGE()
関数は現在非推奨であり、MySQLの将来のリリースで削除される可能性があります。
構文
構文は次のようになります:
JSON_MERGE_PRESERVE(json_doc, json_doc[, json_doc] ...)
json_doc
の場所 マージされるJSONドキュメントです。
いずれかのドキュメントが無効な場合、エラーが発生します。
引数がNULL
の場合 、この関数はNULL
を返します 。
例1-基本的な使用法
実例を示します。
SELECT JSON_MERGE_PRESERVE('{"Name": "Homer"}', '{"Age": 39}') Result;
結果:
+------------------------------+ | Result | +------------------------------+ | {"Age": 39, "Name": "Homer"} | +------------------------------+
したがって、この例では、2つの別々のオブジェクトを1つのオブジェクトにマージしました。
これは、JSON_MERGE_PATCH()
を使用した場合に得られる結果とまったく同じです。 働き。ただし、重複するキーをマージしようとすると、これら2つの関数は異なる結果を生成します。
例2–キーの重複
名前が示すように、JSON_MERGE_PRESERVE()
関数は、重複するキーを持つメンバーを保持します(これは、JSON_MERGE_PATCH()
とは異なる点です。 関数)。
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
結果:
+-----------------------------------+ | Result | +-----------------------------------+ | {"Name": ["Bartholomew", "Bart"]} | +-----------------------------------+
したがって、この場合、配列が作成され、BartとBartholomewの両方がその配列の個別の要素として追加されました。
これは、JSON_MERGE_PATCH()
とは対照的です。 次のことを行う関数:
SELECT JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
結果:
+------------------+ | Result | +------------------+ | {"Name": "Bart"} | +------------------+
例3–複数のメンバー
別の例を示しますが、オブジェクトに追加のメンバーがあります:
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
結果:
+----------------------------------------------+ | Result | +----------------------------------------------+ | {"Age": 10, "Name": ["Bartholomew", "Bart"]} | +----------------------------------------------+
これは逆の場合にも機能します。2番目のオブジェクトに追加のメンバーを追加しても結果は同じです。
SELECT JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
結果:
+----------------------------------------------+ | Result | +----------------------------------------------+ | {"Age": 10, "Name": ["Bartholomew", "Bart"]} | +----------------------------------------------+
例4–その他のドキュメント
2つのドキュメントのみをマージすることに限定されません。必要な数だけマージできます。これは、3つのオブジェクトをマージする例です。
SELECT JSON_MERGE_PRESERVE('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
結果:
+-----------------------------------------------------+ | Result | +-----------------------------------------------------+ | {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} | +-----------------------------------------------------+
例5–アレイ
同じ名前の2つの配列をマージする例を次に示します。
SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
結果:
+-------------------------------------------------------+ | Result | +-------------------------------------------------------+ | {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} | +-------------------------------------------------------+
これは、JSON_MERGE_PATCH()
の別の例です。 別の結果が返されます。
明らかに、配列の名前が異なる場合、それらは別々の配列になります(ただし、同じJSONドキュメント内にあります):
SELECT JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobby": ["Skateboarding"]}') Result;
結果:
+------------------------------------------------------------------+ | Result | +------------------------------------------------------------------+ | {"Hobby": ["Skateboarding"], "Hobbies": ["Trouble", "Mischief"]} | +------------------------------------------------------------------+
例6–より大きなJSONドキュメント
これは、(少し)大きなJSONドキュメントをマージする例です。
SET @data1 = '{ "Suspect": { "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"] } }', @data2 = '{ "Suspect": { "Age": 10, "Parents": ["Marge", "Homer"], "Hobbies": ["Trouble"] } }'; SELECT JSON_MERGE_PRESERVE(@data1, @data2) Result;
結果:
+------------------------------------------------------------------------------------------------------------------------------+ | Result | +------------------------------------------------------------------------------------------------------------------------------+ | {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief", "Trouble"], "Parents": ["Marge", "Homer"]}} | +------------------------------------------------------------------------------------------------------------------------------+
この関数がマージを実行する方法の正確なルールについては、MySQLのドキュメントを参照してください。