MySQLでは、JSON_UNQUOTE()
関数はJSONドキュメントを「引用解除」し、結果をutf8mb4
として返します 文字列。
JSONドキュメントを引数として指定すると、関数が残りを実行します。
構文
構文は次のようになります:
JSON_UNQUOTE(json_val)
ここで、json_val
引用符で囲まないようにするJSONドキュメントです。
例
実例を示します。
SET @data = '"Homer Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
結果:
+-----------------+---------------+ | Original | Unquoted | +-----------------+---------------+ | "Homer Simpson" | Homer Simpson | +-----------------+---------------+
エスケープ文字
この関数がエスケープ文字を処理する方法は、NO_BACKSLASH_ESCAPES
かどうかによって異なります。 有効または無効です。
NO_BACKSLASH_ESCAPESが無効になっている場合
NO_BACKSLASH_ESCAPES
MySQL8.0ではデフォルトでモードが無効になっています。
\t
を含めるとどうなりますか NO_BACKSLASH_ESCAPES
の場合、文字列内でタブ文字を指定します が無効になっていて、なし JSON_UNQUOTE()
を使用する 。
SET @data = '"Homer \t Simpson"'; SELECT @data Original;
結果:
+-------------------+ | Original | +-------------------+ | "Homer Simpson" | +-------------------+
JSON_UNQUOTE()
を使用するとどうなりますか :
SET @data = '"Homer \t Simpson"'; SELECT JSON_UNQUOTE(@data) Unquoted;
結果:
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Invalid escape character in string." at position 7.
これは、2つの円記号(\\t
)を使用することで解決できます。 )。ただし、これを行うと、しない場合に結果が変わることに注意してください。 JSON_UNQUOTE()
を使用する 。
SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
結果:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+
NO_BACKSLASH_ESCAPESが有効になっている場合
NO_BACKSLASH_ESCAPES
を有効にすると次のようになります 前のステートメントを実行する前に:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \\t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
結果:
+---------------------+------------------+ | Original | Unquoted | +---------------------+------------------+ | "Homer \\t Simpson" | Homer \t Simpson | +---------------------+------------------+>
そして、最初の円記号を削除するとどうなりますか:
SET @@sql_mode = 'NO_BACKSLASH_ESCAPES'; SET @data = '"Homer \t Simpson"'; SELECT @data Original, JSON_UNQUOTE(@data) Unquoted;
結果:
+--------------------+-----------------+ | Original | Unquoted | +--------------------+-----------------+ | "Homer \t Simpson" | Homer Simpson | +--------------------+-----------------+