SQLiteを使用する場合、次の方法を使用してJSONドキュメントからデータを抽出できます。
json_extract()
機能
その名前が示すように、 json_extract()
関数は、整形式のJSONから1つ以上の値を抽出して返します。
例:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1]'
);
結果:
{"name":"Bark","scores":[3,4,8,7]}
配列はゼロベースであるため、カウントは 0
から始まります。 。したがって、 [1]
を指定しました dogs
内の2番目の要素を取得します 配列。これはたまたまJSONオブジェクトです。
パスに追加することで、配列内のその位置にある犬の名前だけを返すことができます:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[1].name'
);
結果:
Bark
json_extract()
を使用できます 複数のパスを返すには:
SELECT json_extract('{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}',
'$.dogs[0].name',
'$.dogs[1].name',
'$.dogs[2].name'
);
結果:
["Wag","Bark","Woof"]
複数のパスから値を抽出すると、値は配列で返されます。
->コード> オペレーター
->コード> オペレーターはJSONドキュメントからサブコンポーネントを抽出し、そのサブコンポーネントのJSON表現を返します。
したがって、最初の例を次のように変更できます。
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1]';
結果:
{"name":"Bark","scores":[3,4,8,7]}
->コード> 演算子は
json_extract()
とは微妙に異なります 機能:
->コード> 演算子は常にサブコンポーネントのJSON表現を返します。
-
json_extract()
関数は、2つ以上のパス引数がある場合(結果がJSON配列であるため)、または単一のパス引数が配列またはオブジェクトを参照する場合にのみJSONを返します。 - パス引数が1つだけで、そのパスがJSON null、文字列、または数値を参照している場合は、
json_extract()
対応するSQLNULL、TEXT、INTEGER、またはREAL値を返します。
したがって、JSONから犬の名前を抽出すると次のようになります。
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' -> '$.dogs[1].name';
結果:
"Bark"
今回は引用符で囲まれています。これは、値のJSON表現が返されたためです。 json_extract()
で同じ値を抽出したとき 以前は、値のSQL表現を取得しました。
ただし、->>
を使用することもできます SQL表現を返す演算子。
->>コード> オペレーター
->>コード> 演算子は
->
と同じように機能します ->>
を除く演算子 指定されたサブコンポーネントのSQL表現を返します。具体的には、 SQL TEXT
を返します。 、 INTEGER
、 REAL
、または NULL
選択したサブコンポーネントを表す値、または NULL
サブコンポーネントが存在しない場合。
したがって、->>
を使用すると次のようになります。 犬の名前を抽出する演算子:
SELECT '{
"dogs" : [
{ "name" : "Wag", "scores" : [ 7, 9 ] },
{ "name" : "Bark", "scores" : [ 3, 4, 8, 7 ] },
{ "name" : "Woof", "scores" : [ 3, 2, 1 ] }
]
}' ->> '$.dogs[1].name';
結果:
Bark
引用符で囲まれなくなりました。