MySQLの共通関数を使用してJSONを処理する方法

MySQLの共通関数を使用してJSONを処理する方法

公式ドキュメント: JSON 関数

名前説明
JSON_APPEND() JSONドキュメントにデータを追加する
JSON_ARRAY() JSON配列を作成する
JSON_ARRAY_APPEND() JSONドキュメントにデータを追加する
JSON_ARRAY_INSERT() JSON配列に挿入
->パスを評価した後、JSON 列から値を返します。JSON_EXTRACT() と同等です。
JSON_CONTAINS() JSONドキュメントにパスに特定のオブジェクトが含まれているかどうか
JSON_CONTAINS_PATH() JSONドキュメントにパスにデータが含まれているかどうか
JSON_DEPTH() JSONドキュメントの最大深度
JSON_EXTRACT() JSONドキュメントからデータを返す
->>パスを評価し、結果を引用符で囲まない後に JSON 列から値を返します。JSON_UNQUOTE(JSON_EXTRACT()) と同等です。
JSON_INSERT() JSONドキュメントにデータを挿入する
JSON_KEYS() JSONドキュメントからのキーの配列
JSON_LENGTH() JSONドキュメント内の要素数
JSON_MERGE() JSONドキュメントをマージする
JSON_OBJECT() JSONオブジェクトを作成する
JSON_QUOTE() JSONドキュメントを引用
JSON_REMOVE() JSONドキュメントからデータを削除する
JSON_REPLACE() JSONドキュメント内の値を置き換える
JSON_SEARCH() JSONドキュメント内の値へのパス
JSON_SET() JSONドキュメントにデータを挿入する
JSON_TYPE() JSON値の型
JSON_UNQUOTE() JSON 値の引用を解除
JSON_VALID() JSON値が有効かどうか

1. 概要

MySQL の json は json 配列と json オブジェクトに分かれています。 $ は JSON オブジェクト全体を表します。データのインデックスを作成するときは、添え字 (JSON 配列の場合は 0 から開始) またはキー値 (JSON オブジェクトの場合は、特殊文字を含むキーは " で囲む必要があります (例: $."my name")) を使用します。

たとえば、[3, {"a": [5, 6], "b": 10}, [99, 100]] の場合、次のようになります。

$[0]:3

$[1]: {"a": [5, 6], "b": 10}

$[2] :[99, 100]

$[3] : NULL

$[1].a:[5, 6]

$[1].a[1]:6

$[1].b:10

$[2][0]:99

2. 比較ルール

JSON 内のデータは、=、<、<=、>、>=、<>、!=、<=> を使用して比較できます。しかし、json のデータ型は多様であるため、異なる型を比較す​​る場合は優先順位があり、優先高優先級的要大于低優先級的(型を確認するには、JSON_TYPE() 関数を使用できます)。優先順位は高から低の順に次のようになります。

ブロブ
少し
不透明
日時
時間
日付
ブール
配列
物体

整数、倍精度
NULL

3. 共通機能

3.1 関数の作成

3.1.1 JSON_配列

JSON_ARRAY(val1、val2、val3...)

指定された要素を含む JSON 配列を生成します。

mysql> JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()); を選択します。
+---------------------------------------------+
| JSON_ARRAY(1, "abc", NULL, TRUE, CURTIME()) |
+---------------------------------------------+
| [1、"abc"、null、true、"11:30:24.000000"] |
+---------------------------------------------+

3.1.2 JSON_オブジェクト

JSON_OBJECT(キー1、値1、キー2、値2...)

指定された KV ペアを含む json オブジェクトを生成します。いずれかのキーが NULL であるか、パラメータの数が奇数の場合、エラーがスローされます。

mysql> JSON_OBJECTを選択します('id'、87、'name'、'carrot');
+-----------------------------------------+
| JSON_OBJECT('id', 87, 'name', 'carrot') |
+-----------------------------------------+
| {"id": 87, "name": "にんじん"} |
+-----------------------------------------+

3.1.3 JSON_QUOTE

JSON_QUOTE(json_val)

json_val を " で囲みます。

mysql> JSON_QUOTE('null') を選択し、JSON_QUOTE('"null"');
+--------------------+----------------------+
| JSON_QUOTE('null') | JSON_QUOTE('"null"') |
+--------------------+----------------------+
| "null" | "\"null\"" |
+--------------------+----------------------+
mysql> JSON_QUOTE('[1, 2, 3]')を選択します。
+-------------------------+
| JSON_QUOTE('[1, 2, 3]') |
+-------------------------+
| "[1, 2, 3]" |
+-------------------------+

3.1.4 変換

変換(json_string,JSON)

mysql> CONVERT('{"mail": "[email protected]", "name": "Amy"}',JSON) を選択します。
+--------------------------------------------------------+
| CONVERT('{"mail": "[email protected]", "name": "Amy"}',JSON) |
+--------------------------------------------------------+
| {"メール": "[email protected]", "名前": "エイミー"} |
+--------------------------------------------------------+

3.2 クエリ機能

3.2.1 JSON_CONTAINS

JSON_CONTAINS(json_doc, val[, パス])

指定されたパス内の指定されたデータが JSON ドキュメントに含まれているかどうかを照会します。含まれている場合は 1 を返し、含まれていない場合は 0 を返します。いずれかのパラメータが NULL であるかパスが存在しない場合は、 NULL が返されます。

mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> @j2 を '1' に設定します。
mysql> JSON_CONTAINS(@j, @j2, '$.a') を選択します。
+---------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+---------------------------------+
| 1 |
+---------------------------------+
mysql> JSON_CONTAINS(@j, @j2, '$.b') を選択します。
+---------------------------------+
| JSON_CONTAINS(@j、@j2、'$.b') |
+---------------------------------+
| 0 |
+---------------------------------+
 
mysql> SET @j2 = '{"d": 4}';
mysql> JSON_CONTAINS(@j, @j2, '$.a') を選択します。
+---------------------------------+
| JSON_CONTAINS(@j, @j2, '$.a') |
+---------------------------------+
| 0 |
+---------------------------------+
mysql> JSON_CONTAINS(@j, @j2, '$.c') を選択します。
+---------------------------------+
| JSON_CONTAINS(@j、@j2、'$.c') |
+---------------------------------+
| 1 |
+---------------------------------+

3.2.2 JSON_CONTAINS_PATH

JSON_CONTAINS_PATH(json_doc、one_or_all、パス[、パス]...)

指定されたパスが存在するかどうかを確認します。存在する場合は 1 を返し、存在しない場合は 0 を返します。いずれかの引数が NULL の場合、NULL を返します。

one_or_all は、「one」または「all」の値のみを取ることができます。one は、そのうちの 1 つだけが存在する必要があることを意味し、all は、すべてが存在している必要があることを意味します。

mysql> SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}';
mysql> JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e') を選択します。
+---------------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.a', '$.e') |
+---------------------------------------------+
| 1 |
+---------------------------------------------+
mysql> JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e') を選択します。
+---------------------------------------------+
| JSON_CONTAINS_PATH(@j, 'all', '$.a', '$.e') |
+---------------------------------------------+
| 0 |
+---------------------------------------------+
mysql> JSON_CONTAINS_PATH(@j, 'one', '$.c.d') を選択します。
+----------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.c.d') |
+----------------------------------------+
| 1 |
+----------------------------------------+
mysql> JSON_CONTAINS_PATH(@j, 'one', '$.a.d') を選択します。
+----------------------------------------+
| JSON_CONTAINS_PATH(@j, 'one', '$.a.d') |
+----------------------------------------+
| 0 |
+----------------------------------------+

3.2.3 JSON_EXTRACT

JSON_EXTRACT(json_doc, パス[, パス] ...)

json ドキュメントからデータを抽出します。いずれかのパラメータが NULL であるかパスが存在しない場合は、 NULL が返されます。複数のパスが抽出された場合、返されるデータは JSON 配列に囲まれます。

mysql> JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]')を選択します。
+--------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]') |
+--------------------------------------------+
| 20 |
+--------------------------------------------+
mysql> JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]')を選択します。
+----------------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[1]', '$[0]') |
+----------------------------------------------------+
| [20, 10] |
+----------------------------------------------------+
mysql> JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]')を選択します。
+-------------------------------------------------+
| JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]') |
+-------------------------------------------------+
| [30, 40] |
+-------------------------------------------------+

MySQL 5.7.9 以降では、代わりに「->」を使用できます。

mysql> SELECT c, JSON_EXTRACT(c, "$.id"), g
   > jempより
   > WHERE JSON_EXTRACT(c, "$.id") > 1
   > ORDER BY JSON_EXTRACT(c, "$.name");
+---------------------------------+-----------+------+
| c | c->"$.id" | g |
+---------------------------------+-----------+------+
| {"id": "3", "name": "バーニー"} | "3" | 3 |
| {"id": "4", "name": "ベティ"} | "4" | 4 |
| {"id": "2", "name": "ウィルマ"} | "2" | 2 |
+---------------------------------+-----------+------+
セット内の 3 行 (0.00 秒)
 
mysql> SELECT c, c->"$.id", g
   > jempより
   > WHERE c->"$.id" > 1
   > ORDER BY c->"$.name";
+---------------------------------+-----------+------+
| c | c->"$.id" | g |
+---------------------------------+-----------+------+
| {"id": "3", "name": "バーニー"} | "3" | 3 |
| {"id": "4", "name": "ベティ"} | "4" | 4 |
| {"id": "2", "name": "ウィルマ"} | "2" | 2 |
+---------------------------------+-----------+------+
セット内の 3 行 (0.00 秒)

MySQL 5.7.13 以降では、「->>」を使用して、抽出された結果から「」記号を削除することもできます。次の 3 つの効果は同じです。

  • JSON_UNQUOTE( JSON_EXTRACT(列、パス) )
  • JSON_UNQUOTE(列 -> パス)
  • 列->>パス
mysql> SELECT * FROM jemp WHERE g > 2;
+---------------------------------+------+
| は | は | は |
+---------------------------------+------+
| {"id": "3", "name": "バーニー"} | 3 |
| {"id": "4", "name": "ベティ"} | 4 |
+---------------------------------+------+
セットに2行(0.01秒)
 
mysql> SELECT c->'$.name' AS name  
  -> jemp から g > 2;
+----------+
| 名前 |
+----------+
| 「バーニー」 |
| 「ベティ」|
+----------+
セット内の 2 行 (0.00 秒)
 
mysql> SELECT JSON_UNQUOTE(c->'$.name') AS name
  -> jemp から g > 2;
+--------+
| 名前 |
+--------+
| バーニー |
| ベティ |
+--------+
セット内の 2 行 (0.00 秒)
 
mysql> SELECT c->>'$.name' AS name
  -> jemp から g > 2;
+--------+
| 名前 |
+--------+
| バーニー |
| ベティ |
+--------+
セット内の 2 行 (0.00 秒)

3.2.4 JSON_KEYS

JSON_KEYS(json_doc[, パス])

指定されたパスの下にあるJSONドキュメントのすべてのキー値を取得し、JSON配列を返します。いずれかのパラメータが NULL であるかパスが存在しない場合は、 NULL が返されます。

mysql> JSON_KEYSを選択します('{"a": 1, "b": {"c": 30}}');
+---------------------------------------+
| JSON_KEYS('{"a": 1, "b": {"c": 30}}') |
+---------------------------------------+
| ["a", "b"] |
+---------------------------------------+
mysql> JSON_KEYSを選択します('{"a": 1, "b": {"c": 30}}', '$.b');
+------------------------------------------------+
| JSON_KEYS('{"a": 1, "b": {"c": 30}}', '$.b') |
+------------------------------------------------+
| ["c"] |
+------------------------------------------------+

3.2.5 JSON_検索

JSON_SEARCH(json_doc、one_or_all、search_str[、escape_char[、path] ...])

指定された文字列を含むパスをクエリし、JSON 配列として返します。いずれかの引数が NUL であるかパスが存在しない場合は、NULL が返されます。

  • one_or_all: 「one」は、1 つが見つかった場合にすべての結果を返すことを意味します。「all」はすべての結果を返すことを意味します。
  • search_str: 検索する文字列。 LIKE では、一致させるために「%」または「_」を使用できます。
  • path: 指定されたパスの下を検索します。
mysql> SET @j = '["abc", [{"k": "10"}, "def"], {"x":"abc"}, {"y":"bcd"}]';
 
mysql> JSON_SEARCH(@j, 'one', 'abc') を選択します。
+---------------------------------+
| JSON_SEARCH(@j, 'one', 'abc') |
+---------------------------------+
| 「$[0]」|
+---------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', 'abc') を選択します。
+---------------------------------+
| JSON_SEARCH(@j, 'all', 'abc') |
+---------------------------------+
| ["$[0]", "$[2].x"] |
+---------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', 'ghi') を選択します。
+---------------------------------+
| JSON_SEARCH(@j, 'all', 'ghi') |
+---------------------------------+
| NULL |
+---------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '10') を選択します。
+------------------------------+
| JSON_SEARCH(@j, 'すべて', '10') |
+------------------------------+
| "$[1][0].k" |
+------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '10', NULL, '$') を選択します。
+-----------------------------------------+
| JSON_SEARCH(@j, 'all', '10', NULL, '$') |
+-----------------------------------------+
| "$[1][0].k" |
+-----------------------------------------+
 
mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[*]');
+--------------------------------------------+
| JSON_SEARCH(@j, 'all', '10', NULL, '$[*]') |
+--------------------------------------------+
| "$[1][0].k" |
+--------------------------------------------+
 
mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$**.k');
+---------------------------------------------+
| JSON_SEARCH(@j, 'all', '10', NULL, '$**.k') |
+---------------------------------------------+
| "$[1][0].k" |
+---------------------------------------------+
 
mysql> SELECT JSON_SEARCH(@j, 'all', '10', NULL, '$[*][0].k');
+-------------------------------------------------+
| JSON_SEARCH(@j, 'all', '10', NULL, '$[*][0].k') |
+-------------------------------------------------+
| "$[1][0].k" |
+-------------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '10', NULL, '$[1]')を選択します。
+--------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '10', NULL, '$[1]') |
+--------------------------------------------+
| "$[1][0].k" |
+--------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '10', NULL, '$[1][0]')を選択します。
+-------------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '10', NULL, '$[1][0]') |
+-------------------------------------------------+
| "$[1][0].k" |
+-------------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', 'abc', NULL, '$[2]')を選択します。
+---------------------------------------------+
| JSON_SEARCH(@j, 'all', 'abc', NULL, '$[2]') |
+---------------------------------------------+
| "$[2].x" |
+---------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%a%') を選択します。
+---------------------------------+
| JSON_SEARCH(@j, 'すべて', '%a%') |
+---------------------------------+
| ["$[0]", "$[2].x"] |
+---------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%b%') を選択します。
+---------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%') |
+---------------------------------+
| ["$[0]", "$[2].x", "$[3].y"] |
+---------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%b%', NULL, '$[0]')を選択します。
+---------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%', NULL, '$[0]') |
+---------------------------------------------+
| 「$[0]」|
+---------------------------------------------+
 
mysql> SELECT JSON_SEARCH(@j, 'all', '%b%', NULL, '$[2]');
+---------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%', NULL, '$[2]') |
+---------------------------------------------+
| "$[2].x" |
+---------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%b%', NULL, '$[1]')を選択します。
+---------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%', NULL, '$[1]') |
+---------------------------------------------+
| NULL |
+---------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%b%', '', '$[1]')を選択します。
+------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%', '', '$[1]') |
+------------------------------------------+
| NULL |
+------------------------------------------+
 
mysql> JSON_SEARCH(@j, 'all', '%b%', '', '$[3]')を選択します。
+------------------------------------------+
| JSON_SEARCH(@j, 'すべて', '%b%', '', '$[3]') |
+------------------------------------------+
| "$[3].y" |
+------------------------------------------+

3.3 関数の変更

3.3.1 JSON_APPEND/JSON_ARRAY_APPEND

JSON_ARRAY_APPEND(json_doc、パス、val[、パス、val]...)

指定されたパスの json 配列の末尾に val を追加します。指定されたパスが JSON オブジェクトの場合、JSON 配列にカプセル化されてから追加されます。いずれかの引数が NULL の場合、NULL を返します。

mysql> SET @j = '["a", ["b", "c"], "d"]';
mysql> JSON_ARRAY_APPEND(@j, '$[1]', 1)を選択します。
+----------------------------------+
| JSON_ARRAY_APPEND(@j, '$[1]', 1) |
+----------------------------------+
| ["a", ["b", "c", 1], "d"] |
+----------------------------------+
mysql> JSON_ARRAY_APPEND(@j, '$[0]', 2)を選択します。
+----------------------------------+
| JSON_ARRAY_APPEND(@j, '$[0]', 2) |
+----------------------------------+
| [["a", 2], ["b", "c"], "d"] |
+----------------------------------+
mysql> JSON_ARRAY_APPEND(@j, '$[1][0]', 3)を選択します。
+-------------------------------------+
| JSON_ARRAY_APPEND(@j, '$[1][0]', 3) |
+-------------------------------------+
| ["a", [["b", 3], "c"], "d"] |
+-------------------------------------+
 
mysql> SET @j = '{"a": 1, "b": [2, 3], "c": 4}';
mysql> JSON_ARRAY_APPEND(@j, '$.b', 'x') を選択します。
+------------------------------------+
| JSON_ARRAY_APPEND(@j, '$.b', 'x') |
+------------------------------------+
| {"a": 1、"b": [2、3、"x"]、"c": 4} |
+------------------------------------+
mysql> JSON_ARRAY_APPEND(@j, '$.c', 'y') を選択します。
+--------------------------------------+
| JSON_ARRAY_APPEND(@j, '$.c', 'y') |
+--------------------------------------+
| {"a": 1、"b": [2、3]、"c": [4、"y"]} |
+--------------------------------------+
 
mysql> @j を '{"a": 1}' に設定します。
mysql> JSON_ARRAY_APPEND(@j, '$', 'z') を選択します。
+---------------------------------+
| JSON_ARRAY_APPEND(@j, '$', 'z') |
+---------------------------------+
| [{"a": 1}, "z"] |
+---------------------------------+

3.3.2 JSON_ARRAY_INSERT

JSON_ARRAY_INSERT(json_doc、パス、val[、パス、val]...)

パスで指定されたjson配列要素にvalを挿入し、元の位置と要素を順に右にシフトします。パスで指定されたデータが JSON 配列要素でない場合、この val はスキップされます。指定された要素インデックスが JSON 配列の長さを超える場合は、最後に挿入されます。

mysql> SET @j = '["a", {"b": [1, 2]}, [3, 4]]';
mysql> JSON_ARRAY_INSERT(@j, '$[1]', 'x')を選択します。
+------------------------------------+
| JSON_ARRAY_INSERT(@j, '$[1]', 'x') |
+------------------------------------+
| ["a", "x", {"b": [1, 2]}, [3, 4]] |
+------------------------------------+
mysql> JSON_ARRAY_INSERT(@j, '$[100]', 'x')を選択します。
+--------------------------------------+
| JSON_ARRAY_INSERT(@j, '$[100]', 'x') |
+--------------------------------------+
| ["a", {"b": [1, 2]}, [3, 4], "x"] |
+--------------------------------------+
mysql> JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x')を選択します。
+-----------------------------------------+
| JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x') |
+-----------------------------------------+
| ["a", {"b": ["x", 1, 2]}, [3, 4]] |
+-----------------------------------------+
mysql> JSON_ARRAY_INSERT(@j, '$[2][1]', 'y')を選択します。
+---------------------------------------+
| JSON_ARRAY_INSERT(@j, '$[2][1]', 'y') |
+---------------------------------------+
| ["a", {"b": [1, 2]}, [3, "y", 4]] |
+---------------------------------------+
mysql> JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y')を選択します。
+----------------------------------------------------+
| JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y') |
+----------------------------------------------------+
| ["x", "a", {"b": [1, 2]}, [3, 4]] |
+----------------------------------------------------+

3.3.3 JSON_INSERT/JSON_REPLACE/JSON_SET

JSON_INSERT(json_doc、パス、val[、パス、val]...)

指定されたパスの下にデータを挿入します。パスがすでに存在する場合、この値は無視されます (存在しない場合にのみ挿入されます)。

mysql> SET @j = '{ "a": 1, "b": [2, 3]}';
mysql> SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
+----------------------------------------------------+
| JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') |
+----------------------------------------------------+
| {"a": 1、"b": [2、3]、"c": "[true、false]"} |
+----------------------------------------------------+

JSON_REPLACE(json_doc, パス, val[, パス, val] ...)

指定されたパス内のデータを置き換えます。パスが存在しない場合はスキップされます (存在する場合のみ置き換えます)。いずれかの引数が NULL の場合、NULL を返します。

mysql> SET @j = '{ "a": 1, "b": [2, 3]}';
mysql> JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]')を選択します。
+-----------------------------------------------------+
| JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') |
+-----------------------------------------------------+
| {"a": 10, "b": [2, 3]} |
+-----------------------------------------------------+

JSON_SET(json_doc、パス、val[、パス、val]...)

指定されたパスのデータ(存在するかどうかに関係なく)を設定します。いずれかの引数が NULL の場合、NULL を返します。

mysql> SET @j = '{ "a": 1, "b": [2, 3]}';
mysql> JSON_SET(@j, '$.a', 10, '$.c', '[true, false]')を選択します。
+-------------------------------------------------+
| JSON_SET(@j, '$.a', 10, '$.c', '[true, false]') |
+-------------------------------------------------+
| {"a": 10、"b": [2、3]、"c": "[true、false]"} |
+-------------------------------------------------+
mysql> SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
+----------------------------------------------------+
| JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]') |
+----------------------------------------------------+
| {"a": 1、"b": [2、3]、"c": "[true、false]"} |
+----------------------------------------------------+
mysql> JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]')を選択します。
+-----------------------------------------------------+
| JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]') |
+-----------------------------------------------------+
| {"a": 10, "b": [2, 3]} |
+-----------------------------------------------------+

3.3.4 JSON_MERGE

JSON_MERGE(json_doc、json_doc[、json_doc]...)

複数の JSON ドキュメントをマージします。ルールは次のとおりです。

  • すべてが json 配列の場合、結果は自動的に json 配列にマージされます。
  • すべてが json オブジェクトの場合、結果は自動的に 1 つの json オブジェクトにマージされます。
  • 複数のタイプがある場合は、非 JSON 配列要素を JSON 配列にカプセル化し、ルール 1 に従ってマージします。
mysql> JSON_MERGE('[1, 2]', '[true, false]')を選択します。
+---------------------------------------+
| JSON_MERGE('[1, 2]', '[true, false]') |
+---------------------------------------+
| [1, 2, 真, 偽] |
+---------------------------------------+
mysql> JSON_MERGE('{"name": "x"}', '{"id": 47}')を選択します。
+------------------------------------------+
| JSON_MERGE('{"name": "x"}', '{"id": 47}') |
+------------------------------------------+
| {"id": 47, "name": "x"} |
+------------------------------------------+
mysql> JSON_MERGE('1', 'true') を選択します。
+-------------------------+
| JSON_MERGE('1', 'true') |
+-------------------------+
| [1、真] |
+-------------------------+
mysql> JSON_MERGEを選択します('[1, 2]', '{"id": 47}');
+------------------------------------+
| JSON_MERGE('[1, 2]', '{"id": 47}') |
+------------------------------------+
| [1, 2, {"id": 47}] |
+------------------------------------+

3.3.5 JSON_REMOVE

JSON_REMOVE(json_doc, パス[, パス] ...)

指定されたパスのデータを削除します。パスが存在しない場合はスキップされます。いずれかの引数が NULL の場合、NULL を返します。

mysql> SET @j = '["a", ["b", "c"], "d"]';
mysql> JSON_REMOVE(@j, '$[1]')を選択します。
+-------------------------+
| JSON_REMOVE(@j, '$[1]') |
+-------------------------+
| ["あ", "だ"] |
+-------------------------+

3.3.6 JSON_UNQUOTE

JSON_UNQUOTE(値)

val を囲む引用符を削除します。 val が NULL の場合、NULL を返します。

mysql> @j を '"abc"' に設定します。
mysql> @j を選択し、JSON_UNQUOTE(@j);
+-------+------------------+
| @j | JSON_UNQUOTE(@j) |
+-------+------------------+
| "abc" | abc |
+-------+------------------+
mysql> SET @j = '[1, 2, 3]';
mysql> @j を選択し、JSON_UNQUOTE(@j);
+-----------+------------------+
| @j | JSON_UNQUOTE(@j) |
+-----------+------------------+
| [1, 2, 3] | [1, 2, 3] |
+-----------+------------------+

3.4 JSON機能クエリ

3.4.1 JSON_DEEPTH

JSON_DEPTH(json_doc)

JSON ドキュメントの深度を取得します。引数が NULL の場合、NULL を返します。

空の JSON 配列、JSON オブジェクト、またはスカラーの深さは 1 です。

mysql> JSON_DEPTH('{}')、JSON_DEPTH('[]')、JSON_DEPTH('true')を選択します。
+------------------+------------------+--------------------+
| JSON_DEPTH('{}') | JSON_DEPTH('[]') | JSON_DEPTH('true') |
+------------------+------------------+--------------------+
| 1 | 1 | 1 |
+------------------+------------------+--------------------+
mysql> JSON_DEPTH('[10, 20]')、JSON_DEPTH('[[], {}]')を選択します。
+------------------------+------------------------+
| JSON_DEPTH('[10, 20]') | JSON_DEPTH('[[], {}]') |
+------------------------+------------------------+
| 2 | 2 |
+------------------------+------------------------+
mysql> JSON_DEPTH('[10, {"a": 20}]')を選択します。
+---------------------------------+
| JSON_DEPTH('[10, {"a": 20}]') |
+---------------------------------+
| 3 |
+---------------------------------+

3.4.2 JSON_長さ

JSON_LENGTH(json_doc[, パス])

指定されたパスの長さを取得します。引数が NULL の場合、 NULL を返します。

長さの計算ルール:

  • スカラーの長さは 1 です。
  • json 配列の長さは要素の数です。
  • json オブジェクトの長さはキーの数です。
mysql> JSON_LENGTH('[1, 2, {"a": 3}]')を選択します。
+---------------------------------+
| JSON_LENGTH('[1, 2, {"a": 3}]') |
+---------------------------------+
| 3 |
+---------------------------------+
mysql> JSON_LENGTH('{"a": 1, "b": {"c": 30}}')を選択します。
+-----------------------------------------+
| JSON_LENGTH('{"a": 1, "b": {"c": 30}}') |
+-----------------------------------------+
| 2 |
+-----------------------------------------+
mysql> JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') を選択します。
+------------------------------------------------+
| JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b') |
+------------------------------------------------+
| 1 |
+------------------------------------------------+

3.4.3 JSON_TYPE

JSON_TYPE(json_val)

json ドキュメントの特定のタイプを取得します。引数が NULL の場合、 NULL を返します。

3.4.4 JSON_VALID

JSON_VALID(値)

val が有効な JSON 形式であるかどうかを判断します。有効な場合は 1、そうでない場合は 0 になります。引数が NUL の場合、NULL が返されます。

mysql> JSON_VALID('{"a": 1}')を選択します。
+------------------------+
| JSON_VALID('{"a": 1}') |
+------------------------+
| 1 |
+------------------------+
mysql> JSON_VALID('hello') を選択し、JSON_VALID('"hello"') を選択します。
+---------------------+-----------------------+
| JSON_VALID('hello') | JSON_VALID('"hello"') |
+---------------------+-----------------------+
| 0 | 1 |
+---------------------+-----------------------+

一般的な MySQL JSON 関数の使用に関するこの記事はこれで終わりです。関連する MySQL JSON 一般的な関数の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL のフィールドを mybatis plus エンティティ クラスで JSON 形式にマップする方法
  • MySQLはJSON内部フィールドを抽出し、数値としてダンプします
  • Mysql クエリの結果セットを JSON データに変換するサンプル コード
  • MySQL で JSON 形式のフィールドをクエリする詳細な説明
  • MySQL json 形式のデータクエリ操作
  • MySQL 8.0はJSONを扱えるようになりました

<<:  CSS3 を使用して 3D テキスト ホバー効果を実装するサンプル コード

>>:  Docker ファイルの保存パス、ポート マッピング操作モードの変更

推薦する

CSS でのナビゲーション バーとドロップダウン メニューの実装

1. CSSナビゲーションバー(1)ナビゲーションバーの機能ナビゲーション バーを使いこなすことは、...

MySQL ロール関数の紹介

目次序文: 1. 役割の紹介2. 役割に関連する操作要約:序文:前回の記事では、MySQLの権限管理...

Vue.jsのレンダリング関数の使い方の詳しい説明

Vue では、ほとんどの場合、テンプレートを使用して HTML を作成することを推奨しています。ただ...

MySQLのジョイントインデックス機能の分析と使用例

この記事では、例を使用して、MySQL 共同インデックスの機能と使用方法を説明します。ご参考までに、...

JavaScriptカルーセルの実装について

今日もとても実践的な事例です。名前を聞くだけで高度で難しそうですよね?今日はカルーセル画像の真髄を簡...

CSS 属性値 clear:right が機能しない理由の詳細

clear プロパティを使用してフロートをクリアすることはよくあることであり、clear プロパティ...

CentOS に PHP5 をインストール、PHP をアンインストール、PHP7 をインストールするチュートリアル

まず、PHP5をインストールするのはとても簡単ですyum install php PHP5 を使用し...

Linux システムで PATH 環境変数を設定する方法 (3 つの方法)

1. Windows システムでは、JDK のインストールなど、多くのソフトウェアのインストールで...

MySQL テーブルがロックされているかどうかを照会する方法

具体的な方法: (推奨チュートリアル:MySQLデータベース学習チュートリアル)テーブルロックの状態...

MySQL インデックスの失敗を引き起こす一般的な書き込み方法の概要

序文最近、古いプロジェクトから残ったいくつかの SQL 最適化の問題に対処するのに忙しくしています。...

JS でオブジェクト プロパティを簡単にトラバースするいくつかの方法

目次1. 自己列挙可能なプロパティ2. Object.values()はプロパティ値を返します3. ...

コメント付きのスネークゲームを実装する js

この記事の例では、スネークゲームを実装するためのjsの具体的なコードを参考までに共有しています。具体...

Ubuntu 20.04 に Python 3 仮想環境をインストールする詳細なチュートリアル

以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

Docker ポート マッピングと外部アクセス不可の問題

Docker コンテナはサービスを提供し、ポート 8888 をリッスンします。外部からアクセスできる...