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

MariaDB JSON_QUERY()の説明

    MariaDBでは、JSON_QUERY() は、提供されたパスに基づいて、JSONドキュメントからオブジェクトまたは配列を返す組み込み関数です。

    JSON_VALUE()に似ています スカラーの代わりにオブジェクトまたは配列を返すことを除いて、関数(JSON_VALUE() スカラーを返します。

    構文

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

    JSON_QUERY(json_doc, path)

    json_docの場所 はJSONドキュメントであり、path ドキュメント内のパスです。

    実例を示します。

    SET @json_document = '
        { 
            "_id" : 1, 
            "name" : "Wag", 
            "details" : {
                "type" : "Dog", 
                "weight" : 20,
                "awards" : { 
                    "Florida Dog Awards" : "Top Dog", 
                    "New York Marathon" : "Fastest Dog", 
                    "Sumo 2020" : "Biggest Dog"
                }
            }
        }
    ';
    SELECT JSON_QUERY(@json_document, '$.details');

    結果:

    {
        "type" : "Dog", 
        "weight" : 20,
        "awards" : { 
            "Florida Dog Awards" : "Top Dog", 
            "New York Marathon" : "Fastest Dog", 
            "Sumo 2020" : "Biggest Dog"
        }
    }

    ドット表記を使用して、次のネストされたオブジェクトに移動できます:

    SET @json_document = '
        { 
            "_id" : 1, 
            "name" : "Wag", 
            "details" : {
                "type" : "Dog", 
                "weight" : 20,
                "awards" : { 
                    "Florida Dog Awards" : "Top Dog", 
                    "New York Marathon" : "Fastest Dog", 
                    "Sumo 2020" : "Biggest Dog"
                }
            }
        }
    ';
    SELECT JSON_QUERY(@json_document, '$.details.awards');

    結果:

    { 
        "Florida Dog Awards" : "Top Dog", 
        "New York Marathon" : "Fastest Dog", 
        "Sumo 2020" : "Biggest Dog"
    }

    配列

    配列を返す例を次に示します。

    SET @json_document = '
        { 
            "_id" : 1, 
            "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
        }
    ';
    SELECT JSON_QUERY(@json_document, '$.awards');

    結果:

    +------------------------------------------+
    | JSON_QUERY(@json_document, '$.awards')   |
    +------------------------------------------+
    | [ "Top Dog", "Best Dog", "Biggest Dog" ] |
    +------------------------------------------+

    実際の配列要素を返したい場合は、JSON_VALUE()を試してください。 機能。

    存在しないパス

    JSONドキュメントに存在しないパスを渡すと、NULLになります 。

    例:

    SET @json_document = '
        { 
            "_id" : 1, 
            "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
        }
    ';
    SELECT JSON_QUERY(@json_document, '$.type');

    結果:

    +--------------------------------------+
    | JSON_QUERY(@json_document, '$.type') |
    +--------------------------------------+
    | NULL                                 |
    +--------------------------------------+

    スカラー値

    スカラー値を返そうとすると、NULLが返されます 。

    例:

    SELECT JSON_QUERY('{ "weight": 10 }', '$.weight');

    結果:

    +--------------------------------------------+
    | JSON_QUERY('{ "weight": 10 }', '$.weight') |
    +--------------------------------------------+
    | NULL                                       |
    +--------------------------------------------+

    スカラー値を返すには、JSON_VALUE()を使用します 機能。

    ヌル引数

    引数がNULLの場合 、結果はNULLです :

    SELECT 
        JSON_QUERY(null, '$.type'),
        JSON_QUERY('{"a":1}', null);

    結果:

    +----------------------------+-----------------------------+
    | JSON_QUERY(null, '$.type') | JSON_QUERY('{"a":1}', null) |
    +----------------------------+-----------------------------+
    | NULL                       | NULL                        |
    +----------------------------+-----------------------------+

    パラメータカウントが正しくありません

    引数を指定しないとエラーが発生します:

    SELECT JSON_QUERY();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'

    提供する引数が少なすぎても多すぎても同じです:

    SELECT JSON_QUERY('{ "a": 1}');

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_QUERY'

    1. 変数を宣言して同じOracleSQLスクリプトで使用するにはどうすればよいですか?

    2. CentOS用のMariaDBクラスターオフラインインストール

    3. PostgreSQLによって導入されたJSONBの説明

    4. Oracle GROUP_CONCAT()と同等