sql >> データベース >  >> RDS >> Mysql

JSON_QUOTE()–MySQLでJSON値として使用される文字列の文字をエスケープする方法

    JSONとMySQLを使用する場合、引用符がJSONドキュメントの解釈に干渉しないように、文字列をエスケープする必要がある場合があります。このような場合は、JSON_QUOTE()を使用できます。 問題のある可能性のある文字列をエスケープする関数。

    JSON_QUOTE() JSONドキュメントに含めることができる有効なJSON文字列リテラルを生成するために使用されます。たとえば、配列内の要素にテキストnullを含めることができます。 実際のnull値ではなく、文字列リテラルとして。この関数を使用して、テキストがnull値ではなく文字列リテラルとして追加されるようにすることができます。

    使用するには、文字列を渡しながら関数を呼び出すだけです。

    構文

    構文は次のようになります:

    JSON_QUOTE(string)
    

    string エスケープする文字列です。

    例1-基本的な使用法

    実例を示します。

    まず、JSON_ARRAY()を使用するとどうなるかを見てみましょう。 配列を作成する関数。

    SELECT JSON_ARRAY("Hot", "Warm", "Cold") AS 'Result';
    

    結果:

    +-------------------------+
    | Result                  |
    +-------------------------+
    | ["Hot", "Warm", "Cold"] |
    +-------------------------+
    

    結果は、3つの要素を含む配列です。角かっこ([)で始まるため、配列であることがわかります。 )で終わり、角かっこで終わります(] )。また、各要素は二重引用符で囲まれているため、文字列であることがわかります。各要素はコンマで区切ります。

    次に、JSON_QUOTE()を使用するとどうなるか見てみましょう。 代わりに。

    SELECT JSON_QUOTE('"Hot", "Warm", "Cold"') AS 'Result';
    

    結果:

    +-------------------------------+
    | Result                        |
    +-------------------------------+
    | "\"Hot\", \"Warm\", \"Cold\"" |
    +-------------------------------+
    

    配列は取得できません。文字列を取得します。二重引用符で開始および終了するため、文字列であることがわかります。文字列内の二重引用符は、円記号(\)でエスケープされます。 。

    これらの文字がエスケープされていない場合は、最初の二重引用符(Hotの後) )は、誤って文字列を終了します。したがって、残りの文字列を含めることはできません。特定の文字をエスケープすることにより、MySQLにそれらの文字を通常のように解釈しないように指示しています。

    例2–数字

    数字が二重引用符で囲まれていないことを除いて、同じ概念が数字にも当てはまります。

    したがって、3つの要素を含む配列を作成できます。これらはすべて数値です。

    SELECT JSON_ARRAY(1, 2, 3) AS 'Result';
    

    結果:

    +-----------+
    | Result    |
    +-----------+
    | [1, 2, 3] |
    +-----------+
    

    そして、JSON_QUOTE()に切り替えるとどうなりますか。 機能。

    SELECT JSON_QUOTE('[1, 2, 3]') AS 'Result';
    

    結果:

    +-------------+
    | Result      |
    +-------------+
    | "[1, 2, 3]" |
    +-------------+
    

    したがって、配列全体が二重引用符で囲まれていることを除いて、同じ結果が得られます。これにより、配列ではなく文字列になります。

    例3–配列/オブジェクトへの追加

    この文字列リテラルを取得して、配列の要素として追加できます。

    SELECT JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'), 8, 9) AS 'Result';

    結果:

    +-------------------------+
    | Result                  |
    +-------------------------+
    | ["\"[1, 2, 3]\"", 8, 9] |
    +-------------------------+
    
    >

    この場合、文字列リテラルが最初の要素であり、8 および9 それぞれ2番目と3番目の要素です。

    この文字列リテラルをオブジェクトで使用することもできます。

    SELECT JSON_OBJECT('Key', JSON_QUOTE('[1, 2, 3]')) AS 'Result';

    結果:

    +--------------------------+
    | Result                   |
    +--------------------------+
    | {"Key": "\"[1, 2, 3]\""} |
    +--------------------------+
    

    例4–値の抽出

    したがって、JSONドキュメントから値を抽出する必要がある場合は、配列ではなく文字列リテラルとして解釈されます。

    まず、3つの数値を別々の要素として配列に設定し、その配列から最初の要素を抽出するとどうなりますか。

    SET @data1 = JSON_ARRAY(1, 2, 3);
    SELECT 
      @data1 AS '@data1',
      JSON_EXTRACT(@data1, '$[0]');
    

    結果:

    +-----------+------------------------------+
    | @data1    | JSON_EXTRACT(@data1, '$[0]') |
    +-----------+------------------------------+
    | [1, 2, 3] | 1                            |
    +-----------+------------------------------+
    

    したがって、この配列は3つの要素で構成されます。各要素は、配列内の個別の要素です。

    ここで、JSON_QUOTE()を使用するとどうなりますか。 3つの数値すべてとそれらの角かっこを文字列リテラルに変換するには、それを配列に追加してから、配列の最初の要素を抽出します。

    SET @data2 = JSON_ARRAY(JSON_QUOTE('[1, 2, 3]'));
    SELECT 
      @data2 AS '@data2',
      JSON_EXTRACT(@data2, '$[0]');
    

    結果:

    +-------------------+------------------------------+
    | @data2            | JSON_EXTRACT(@data2, '$[0]') |
    +-------------------+------------------------------+
    | ["\"[1, 2, 3]\""] | "\"[1, 2, 3]\""              |
    +-------------------+------------------------------+
    

    したがって、この場合、配列は1つの要素、つまり文字列リテラル全体で構成されます。


    1. OracleのDBTIMEZONE関数

    2. MySQL:データベースに対する**すべての**権限を付与します

    3. Microsoft SQL Server2012のクエリがJDBC4.0で数分かかるのに、Management Studioでは1秒かかるのはなぜですか?

    4. Moodle用のPostgreSQLを監視するためのヒント