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 の読み込みによってブロックが発生しますか?

おそらく誰もが js の実行によって DOM ツリーの解析とレンダリングがブロックされることを知って...

MySQLのトランザクション特性とレベル原則の分析

1. トランザクションとは何ですか?データベース トランザクション (略称: トランザクション) は...

Vueタイマーの実装方法

この記事では、参考までにタイマーを実装するためのVueの具体的なコードを紹介します。具体的な内容は次...

Vue でのスロット配置と使用状況分析

このチュートリアルの動作環境: Windows 7 システム、vue 2.9.6 バージョン、DEL...

SQL ステートメント実行の詳細な説明 (MySQL アーキテクチャの概要 -> クエリ実行プロセス -> SQL 解析順序)

序文:私はずっと、SQL 文がどのように、どのような順序で実行されるのかを知りたいと思っていました。...

CSS の子要素の Z インデックスと親要素の兄弟ノードの階層問題を解決する

1. 問題の出現フラット リストを作成しました。リストの一部には、マウスをホバーすると表示されるポッ...

MySQL フルテキスト検索の中国語ソリューションとサンプルコード

MySQL 全文検索中国語ソリューション最近、会社のプロジェクトで、データベースで中国語を検索する機...

SQL Server 2019 Always On クラスターの Docker デプロイメントの実装

目次Docker デプロイメント Always on クラスターDockerをインストールする建築関...

Google Recaptcha 認証を使用した Vue 実装例

最近のプロジェクトでは、Google ロボット認証を使用する必要があります。これには VPN が必要...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

Vueのイベント処理とイベント修飾子の詳細な説明

<div id="ルート"> <h2>頑張れ、{{na...

MySQL 正規表現 (regexp と rlike) の検索機能の例分析

この記事では、例を使用して MySQL 正規表現 (regexp および rlike) の検索機能を...

Linux でファイルの権限 (所有権) を変更する

Linux と Unix はマルチユーザー オペレーティング システムであるため、ファイルの権限と所...

MySQL 5.7.17 最新インストールチュートリアル(画像とテキスト付き)

mysql-5.7.17-winx64 は MySQL の最新バージョンです。インストールは無料で...

MySQL の起動時に InnoDB エンジンが無効になる問題の解決方法

問題を見つける今日、仕事中に、ローカル データベースから仮想マシン CentOS 6.6 上のデータ...