説明
この関数は、指定された値をJSONドキュメント内の指定された配列の末尾に追加し、結果を返します。これは、JSON_ARRAY_APPEND() 関数のエイリアスです。
構文
JSON_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"]';値
1を変数@jnの$[1]パスにある配列の末尾に追加します。obclient> SELECT JSON_APPEND(@jn, '$[1]', 1);ここで、
$[1]はJSON配列の2番目の要素に対応します。実行結果は次のとおりです:+--------------------------------+ | JSON_APPEND(@jn, '$[1]', 1) | +--------------------------------+ | ["a", ["b", "c", 1], "d", "e"] | +--------------------------------+ 1 row in set値
2を変数@jnの$[0]パスにある配列の末尾に追加します。obclient> SELECT JSON_APPEND(@jn, '$[0]', 2);ここで、
$[0]はJSON配列の最初の要素に対応します。実行結果は次のとおりです:+----------------------------------+ | JSON_APPEND(@jn, '$[0]', 2) | +----------------------------------+ | [["a", 2], ["b", "c"], "d", "e"] | +----------------------------------+ 1 row in set["b", "c"]が配列であるため、値3を変数@jnの$[1][0]パスにある配列の末尾に追加できます。obclient> SELECT JSON_APPEND(@jn, '$[1][0]', 3);実行結果は次のとおりです:
+----------------------------------+ | JSON_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_APPEND(@jemp, '$.b', 'x');ここで、
$.bは"b"キーに対応する配列を表します。実行結果は次のとおりです:+------------------------------------+ | JSON_APPEND(@jemp, '$.b', 'x') | +------------------------------------+ | {"a": 1, "b": [2, 3, "x"], "c": 4} | +------------------------------------+ 1 row in set同様に、文字列
yを変数@jempの$.cパスにある配列の末尾に追加します。obclient> SELECT JSON_APPEND(@jemp, '$.c', 'y');ここで、
$.cは"c"キーに対応する配列を表します。実行結果は次のとおりです:+--------------------------------------+ | JSON_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_APPEND(@temp, '$', 'z');注意点として、パス
$はJSONドキュメントのルートレベル、つまりJSONオブジェクト全体を指し、JSONオブジェクトにキー・バリュー・ペアを追加するわけではないことを示しています。実行結果は次のとおりです:+------------------------------+ | JSON_APPEND(@temp, '$', 'z') | +------------------------------+ | [{"a": 5}, "z"] | +------------------------------+ 1 row in set