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"] | +-------------------------------------+