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

MariaDB JSON_EXTRACT()の説明

    MariaDBでは、JSON_EXTRACT() は、指定された1つまたは複数のパスに基づいてJSONドキュメントからデータを抽出する組み込み関数です。

    単一の値と複数の値を返すことができます。単一の値が一致した場合、単一の値が返されます。複数の値が一致する場合、それらの値は配列で返されます。

    構文

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

    JSON_EXTRACT(json_doc, path[, path] ...)

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

    実例を示します。

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "weight": 20 
        }
    ';
    SELECT JSON_EXTRACT(@json_document, '$.name');

    結果:

    +----------------------------------------+
    | JSON_EXTRACT(@json_document, '$.name') |
    +----------------------------------------+
    | "Wag"                                  |
    +----------------------------------------+

    複数のパス

    JSONドキュメントから複数の値を返すために複数のパスを指定する例を次に示します。

    複数の値を返す場合、それらは配列で返されます。

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "weight": 20 
        }
    ';
    SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');

    結果:

    +----------------------------------------------------+
    | JSON_EXTRACT(@json_document, '$.name', '$.weight') |
    +----------------------------------------------------+
    | ["Wag", 20]                                        |
    +----------------------------------------------------+

    存在しないパス

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

    例:

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "weight": 20 
        }
    ';
    SELECT JSON_EXTRACT(@json_document, '$.color');

    結果:

    +-----------------------------------------+
    | JSON_EXTRACT(@json_document, '$.color') |
    +-----------------------------------------+
    | NULL                                    |
    +-----------------------------------------+

    ただし、複数のパスが渡され、そのうちの少なくとも1つが一致する場合、一致する値が抽出され、配列で返されます。これは、値が1つだけ抽出された場合でも当てはまります。

    例:

    SET @json_document = '
        { 
            "name": "Wag", 
            "type": "Dog", 
            "weight": 20 
        }
    ';
    SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');

    結果:

    +---------------------------------------------------+
    | JSON_EXTRACT(@json_document, '$.name', '$.color') |
    +---------------------------------------------------+
    | ["Wag"]                                           |
    +---------------------------------------------------+

    配列

    配列からデータを抽出する例を次に示します。

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

    結果:

    +---------------------------------------------+
    | JSON_EXTRACT(@json_document, '$.awards[0]') |
    +---------------------------------------------+
    | "Top Dog"                                   |
    +---------------------------------------------+

    配列はゼロベースであるため、$.awards[0] awardsの最初の要素を抽出します 配列。

    ネストされたオブジェクト

    別のオブジェクト内にネストされたオブジェクトからデータを抽出する例を次に示します。

    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_EXTRACT(
        @json_document, 
        '$.details.awards.New York Marathon'
        ) AS Result;

    結果:

    +---------------+
    | Result        |
    +---------------+
    | "Fastest Dog" |
    +---------------+

    ただし、すべての賞を抽出したい場合は、パスを$.details.awardsに短縮できます。 :

    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_EXTRACT(
        @json_document, 
        '$.details.awards'
        ) AS Result;

    結果:

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

    結果をきれいにする

    JSON_EXTRACT()を渡すことで、結果を読みやすくすることができます。 JSON_DETAILED()へ 機能:

    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_DETAILED(
            JSON_EXTRACT(
                @json_document, 
                '$.details.awards'
                ) 
        ) AS Result;

    結果:

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

    ヌル引数

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

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

    結果:

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

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

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

    SELECT JSON_EXTRACT();

    結果:

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

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

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

    結果:

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

    1. R11iのPL/SQLゲートウェイ

    2. SQLServerの重複キー更新に関するMySQLと同等

    3. MySQL:エラーコード:1118行サイズが大きすぎます(> 8126)。一部の列をTEXTまたはBLOBに変更する

    4. ADO.NETプロバイダーの「Oracle.ManagedDataAccess.Client」がマシンまたはアプリケーションの構成ファイルに登録されていないか、ロードできませんでした