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

SQLite JSON_REMOVE()

    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の形式が正しくないことを示しています。


    1. CentOS8にMariaDBをインストールして保護する方法

    2. PostgreSQLデータソースをWildFly9.0に追加するにはどうすればよいですか?

    3. MySQL5.6非GTIDからGTIDを使用したMySQL5.7へのオンライン移行

    4. ORA-12505を修正する方法、TNS:listenerは現在、接続記述子で指定されたSIDを認識していません