SQLiteは、JSONドキュメントの値を挿入、設定、および置換するためのいくつかの関数を提供します。具体的には、json_insert()
を提供します 、json_set()
、およびjson_replace()
。
これらの関数は同様のタスクを実行し、特定のポイントまで互換的に使用できる場合があります。
しかし、各機能には間違いなく明確な違いがあります。
違い
次の表に、これらの機能の違いの概要を示します。
関数 | すでに存在する場合は上書きしますか? | 存在しない場合は作成しますか? |
---|---|---|
json_insert() | いいえ | はい |
json_replace() | はい | いいえ |
json_set() | はい | はい |
したがって、これらの関数の違いは、存在するキー/値と存在しないキー/値を処理する方法にあります。
例
各関数が存在するキー/値と存在しないキー/値をどのように処理するかを示す簡単な例を次に示します。
キーがすでに存在する場合
各関数が既存のキーの更新をどのように処理するかを次に示します。
SELECT
json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.a', 2) AS json_set;
結果:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | {"a":1} | {"a":2} | {"a":2} | +-------------+--------------+----------+
json_insert()
であることがわかります 何も更新しませんでしたが、他の2つの機能は更新しました。
アレイでも同様です:
SELECT
json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;
結果:
+-------------+--------------+----------+ | json_insert | json_replace | json_set | +-------------+--------------+----------+ | [1,2,3] | [1,4,3] | [1,4,3] | +-------------+--------------+----------+
キーが存在しない場合
キーが存在しない場合は次のようになります。
SELECT
json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
json_set('{ "a" : 1 }', '$.b', 2) AS json_set;
結果:
+---------------+--------------+---------------+ | json_insert | json_replace | json_set | +---------------+--------------+---------------+ | {"a":1,"b":2} | {"a":1} | {"a":1,"b":2} | +---------------+--------------+---------------+
json_replace()
であることがわかります 新しいキーと値のペアを挿入しませんでしたが、他の2つの関数は挿入しました。
配列についても同じです:
SELECT
json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;
結果:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
これは、[#]
を使用して行うこともできます パス:
SELECT
json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;
結果:
+-------------+--------------+-----------+ | json_insert | json_replace | json_set | +-------------+--------------+-----------+ | [1,2,3,4] | [1,2,3] | [1,2,3,4] | +-------------+--------------+-----------+
[#]
を使用する利点の1つ つまり、配列にすでに含まれている要素の数を知る必要はありません。