SQLiteのjson_remove()
を使用できます JSONオブジェクトまたは配列から1つ以上の要素を削除する関数。
関数を呼び出すときの最初の引数として元のJSONを渡し、その後に削除する要素を指定する1つ以上のパスを渡します。 「要素」とは、配列要素またはオブジェクトメンバー(キーと値のペア)のいずれかを意味します。
構文
構文は次のようになります:
json_remove(X,P,...)
ここでX
元のJSONを表し、P,...
削除するパスを表します。
例
デモンストレーションの例を次に示します。
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.age');
結果:
{"name":"Fluffy"}
ここでは、$.age
を指定しました パス、それがJSONドキュメントから削除されたものです。
複数のメンバーを削除する
カンマで区切って複数のパスを指定することで、JSONオブジェクトから複数のメンバーを削除できます:
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}',
'$.type',
'$.age'
);
結果:
{"name":"Fluffy"}
配列
要素のインデックスを指定することで、配列要素を削除できます:
SELECT json_remove('[ 0, 1, 2, 3 ]', '$[2]');
結果:
[0,1,3]
配列はゼロベースであるため、カウントは0
から始まります。 。
ただし、削除が行われる順序に注意することが重要です。削除は左から右に順番に行われます。以前の削除によって引き起こされた変更は、後続の引数のパス検索に影響を与える可能性があります。
これが結果にどのように影響するかの例を次に示します。
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[0]',
'$[2]'
);
結果:
[1,2]
この場合、配列要素0
最初に削除され、次に配列要素2
残りのアレイから削除されました。つまり、最初のパスがすでに削除された後、2番目のパスが配列から要素を削除しました。
結果の配列は、私たちが予期していなかったものです。要素を削除する代わりに0
および2
元の配列から、要素0
を削除しました および3
元のアレイから。
パスを並べ替えることで、この問題を解決できます:
SELECT json_remove('[ 0, 1, 2, 3 ]',
'$[2]',
'$[0]'
);
結果:
[1,3]
パスなし
パス引数は実際にはオプションです。 json_remove()
を呼び出すと パス引数がない場合、入力JSONの縮小バージョンが返されます(つまり、余分な空白が削除されます):
SELECT json_remove('{
"name" : "Fluffy",
"type" : "Cat",
"age" : 10
}'
);
結果:
{"name":"Fluffy","type":"Cat","age":10}
これは、json()
を使用した場合に得られる結果と同じです。 json_remove()
の代わりに関数 。
存在しないパス
入力JSONに存在しないパスを指定すると、元のJSONが変更されずに返されます:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', '$.type');
結果:
{"name":"Fluffy","age":10}
無効なパス
パスが整形式でない場合はエラーが発生します:
SELECT json_remove('{ "name" : "Fluffy", "age" : 10 }', 'age');
結果:
Runtime error: JSON path error near 'age'
この場合、$.
パスの前にあります。
無効なJSONドキュメント
また、JSONの形式が正しくないというエラーも表示されます:
SELECT json_remove('{ "name" : "Fluffy", "age" }', '$.age');
結果:
Runtime error: malformed JSON
今回のエラーは、JSONの形式が正しくないことを示しています。