説明
この関数は、指定された値をJSONドキュメント内の指定された配列の末尾に追加し、結果を返します。これは、JSON_APPEND() 関数のエイリアスです。
構文
JSON_ARRAY_APPEND(json_doc, path, val[, path, val] ...)
説明
json_doc パラメータはJSONドキュメントを指定するために使用され、path はパスパラメータです。いずれかのパラメータが NULL の場合、NULL を返します。
以下の場合、エラーが発生します:
json_docパラメータが有効なJSONドキュメントではない場合。pathパラメータが有効なパス式ではない場合。pathパラメータに * または ** ワイルドカードが含まれている場合。
パス値ペア path-value は、左から右の順に評価されます。評価された path-value ペアによって生成されたドキュメントが、次のペアを評価するための新しい値となります。
パスが対応する値がスカラーまたはオブジェクト値の場合、その値は自動的に配列でラップされ、新しい値がその配列に追加されます。JSONドキュメント内でパスによって識別されず、どの配列に属するかが不明な path-value ペアは無視されます。
例
以下の例では、ユーザー変数
@jnを定義し、JSON文字列を格納します。このJSON文字列は、JSON配列を表します。obclient> SET @jn = '["a", ["b", "c"], "d","e"]';変数
@jnの$[1]パスにある配列の末尾に値1を追加します。obclient> SELECT JSON_ARRAY_APPEND(@jn, '$[1]', 1);ここで、
$[1]はJSON配列の2番目の要素に対応します。実行結果は次のとおりです:+-----------------------------------+ | JSON_ARRAY_APPEND(@jn, '$[1]', 1) | +-----------------------------------+ | ["a", ["b", "c", 1], "d", "e"] | +-----------------------------------+ 1 row in set変数
@jnの$[0]パスにある配列の末尾に値2を追加します。obclient> SELECT JSON_ARRAY_APPEND(@jn, '$[0]', 2);ここで、
$[0]はJSON配列の最初の要素に対応します。実行結果は次のとおりです:+-----------------------------------+ | JSON_ARRAY_APPEND(@jn, '$[0]', 2) | +-----------------------------------+ | [["a", 2], ["b", "c"], "d", "e"] | +-----------------------------------+ 1 row in set["b", "c"]が配列であるため、変数@jnの$[1][0]パスにある配列の末尾に値3を追加できます。obclient> SELECT JSON_ARRAY_APPEND(@jn, '$[1][0]', 3);実行結果は次のとおりです:
+--------------------------------------+ | JSON_ARRAY_APPEND(@jn, '$[1][0]', 3) | +--------------------------------------+ | ["a", [["b", 3], "c"], "d", "e"] | +--------------------------------------+ 1 row in set以下の例では、ユーザー変数
@jempを定義し、JSON文字列を格納します。このJSON文字列は、オブジェクトを表します。このオブジェクトには、3つのキー・バリュー・ペアが含まれています:"a"の値は数値1です;"b"の値は数値2と3を含む配列です;"c"の値は数値4です。obclient> SET @jemp = '{"a": 1, "b": [2, 3], "c": 4}';文字列
xを変数@jempの$.bパスにある配列の末尾に追加します。obclient> SELECT JSON_ARRAY_APPEND(@jemp, '$.b', 'x');ここで、
$.bは"b"キーに対応する配列を表します。実行結果は次のとおりです:+--------------------------------------+ | JSON_ARRAY_APPEND(@jemp, '$.b', 'x') | +--------------------------------------+ | {"a": 1, "b": [2, 3, "x"], "c": 4} | +--------------------------------------+ 1 row in set同様に、文字列
yを変数@jempの$.cパスにある配列の末尾に追加します。obclient> SELECT JSON_ARRAY_APPEND(@jemp, '$.c', 'y');ここで、
$.cは"c"キーに対応する配列を表します。実行結果は次のとおりです:+--------------------------------------+ | JSON_ARRAY_APPEND(@jemp, '$.c', 'y') | +--------------------------------------+ | {"a": 1, "b": [2, 3], "c": [4, "y"]} | +--------------------------------------+ 1 row in set以下の例では、ユーザー変数
@tempを定義し、単純なJSONオブジェクトを格納します。このオブジェクトでは、キーは"a"、値は数値5です。obclient> SET @temp = '{"a": 5}';文字列
zを変数@tempの$パスにある配列の末尾に追加します。obclient> SELECT JSON_ARRAY_APPEND(@temp, '$', 'z');注意点として、パス
$はJSONドキュメントのルートレベル、すなわちJSONオブジェクト全体を指します。これは、JSONオブジェクトにキー・バリュー・ペアを追加することを意味するものではありません。実行結果は次のとおりです:+------------------------------------+ | JSON_ARRAY_APPEND(@temp, '$', 'z') | +------------------------------------+ | [{"a": 5}, "z"] | +------------------------------------+ 1 row in set