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

MariaDBでJSON配列から要素を返す方法

    MariaDBには、JSON配列から要素を選択できるようにする2つのセレクターが含まれています。

    • [N] 要素番号Nを選択します 配列内(たとえば、[0] 最初の要素を選択します)。
    • [*] 配列内のすべての要素を選択します。

    これらは、MariaDBに含まれている多くのJSON関数で使用できます。次の例では、JSON_EXTRACT()でそれらを使用しています。 選択した配列要素を返すための関数。

    例– [N]

    単一の配列要素を選択する方法を示す簡単な例を次に示します。

    SELECT JSON_EXTRACT('[1,2,3]', '$[1]');

    結果:

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

    配列はゼロベースであるため、$[1] 2番目の配列要素を選択します。

    別の例を次に示します。今回は少し大きいJSONドキュメントを使用しています。

    SET @json = '
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        }
    ';
    
    SELECT JSON_EXTRACT(@json, '$.sizes[1]');

    結果:

    +-----------------------------------+
    | JSON_EXTRACT(@json, '$.sizes[1]') |
    +-----------------------------------+
    | "M"                               |
    +-----------------------------------+

    この場合、.sizes sizesを指定します オブジェクトメンバー、つまり$.sizes[1] sizesの2番目のアイテムを選択します 配列。

    例-[*]

    [*] セレクターは配列内のすべての要素を選択します。

    例:

    SET @json = '
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        }
    ';
    
    SELECT JSON_EXTRACT(@json, '$.sizes[*]');

    結果:

    +-----------------------------------+
    | JSON_EXTRACT(@json, '$.sizes[*]') |
    +-----------------------------------+
    | ["S", "M", "L"]                   |
    +-----------------------------------+

    この場合、結果は元の配列とまったく同じになります。この場合、$.sizesを指定するだけで結果が返される可能性があります。 。

    複数のアレイセレクター

    ただし、2つの配列セレクターを使用する別の例を次に示します。

    まず、ワイルドカードセレクターを使用して、配列内のすべての要素を選択します。次に、別の配列セレクターを使用して、それらの要素内にネストされている配列の2番目の要素のみを選択します。

    SET @json = '
    { 
        "products" : 
        [
            { 
                "_id": 1, 
                "product": "Left Handed Screwdriver", 
                "sizes": [ "S", "M", "L" ] 
            },
            { 
                "_id": 2, 
                "product": "Long Weight", 
                "sizes": [ 8, 7, 10 ] 
            },
            { 
                "_id": 3, 
                "product": "Bottomless Coffee Cup", 
                "sizes": [ "Tall", "Grande", "Venti" ] 
            }
        ]
    }
    ';
    
    SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');

    結果:

    +-----------------------------------------------+
    | JSON_EXTRACT(@json, '$.products[*].sizes[1]') |
    +-----------------------------------------------+
    | ["M", 7, "Grande"]                            |
    +-----------------------------------------------+

    ワイルドカードステップ

    JSONドキュメントに同じ名前の複数の配列が含まれている場合、一部は異なるレベルでネストされているか、独自のオブジェクトにある場合は、ワイルドカードステップ(**)を使用してすべてを選択できます。 )。ワイルドカードステップは、現在の要素のすべての子要素を再帰的に選択します。

    ここでは、これを使用して、sizesと呼ばれるすべての配列から2番目の配列要素を返すJSONPath式を作成します。 、他のドキュメント内にネストされている配列を含む:

    SET @json = '[
        { 
            "_id": 1, 
            "product": { 
                "name" : "Tuxedo", 
                "color" : "Blue",
                "sizes": [ "S", "M", "L" ],
                "accessories" : {
                    "belt" : {
                        "color" : "Navy",
                        "sizes" : [ "Wide", "Narrow" ]
                    },
                    "tie" : {
                        "color" : "Black",
                        "sizes" : [ "Short", "Medium", "Long" ]
                    }
                }
            }
        }
    ]';
    
    SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

    結果:

    +-------------------------------------+
    | JSON_EXTRACT(@json, '$**.sizes[1]') |
    +-------------------------------------+
    | ["M", "Narrow", "Medium"]           |
    +-------------------------------------+

    1. 列を削除しても列参照が完全に削除されるわけではありません-postgresql

    2. ProxySQL監査ログを理解する

    3. MariaDBのCOUNT()関数

    4. AT TIME ZONE – SQLServer2016の新しいお気に入りの機能