SQLiteリファレンス
当サイトはSQLiteに関するSQL文やコマンドのリファレンスサイトです。
HOME > Jから始まるSQL文・コマンド

json_patch関数

JSONパッチを適用する関数

JSONパッチを適用する方法

JSONパッチを適用するにはjson_patch関数を使用します。

json_patch関数の書き方

json_patch('{"a":1,"b":2}','{"c":3,"d":4}') → '{"a":1,"b":2,"c":3,"d":4}'
json_patch('{"a":[1,2],"b":2}','{"a":9}') → '{"a":9,"b":2}'
json_patch('{"a":[1,2],"b":2}','{"a":null}') → '{"b":2}'
json_patch('{"a":1,"b":2}','{"a":9,"b":null,"c":8}') → '{"a":9,"c":8}'
json_patch('{"a":{"x":1,"y":2},"b":3}','{"a":{"y":9},"c":8}') → '{"a":{"x":1,"y":9},"b":3,"c":8}'

SQLite3.9からJSON関数が導入されました。

MergePatchアルゴリズムを実行して、入力Tに対してパッチPを適用します。パッチされたTのコピーが戻されます。

json_patch関数の使い方

PHPのPDOを使用した例

SQL
<?php
$pdo = new PDO("sqlite:./test.sqlite3");
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE,PDO::FETCH_ASSOC);
$pdo->setAttribute(PDO::ATTR_TIMEOUT,5);

$pdo->exec("create table a ( name json )");
$pdo->exec("insert into a values ( json('{\"a\":333}') )");
$stmt = $pdo->query("select json_patch( name , '{\"b\":555}' ) from a");
$result = $stmt->fetchAll();

echo "<pre>";
print_r($result);
echo "</pre>";
?>

SQLiteのGUIツールを使用した例

SQL
C:sq>sqlite3 test.sqlite3
sqlite> create table a ( name json );
sqlite> insert into a values ( json('{"a":333}') );
sqlite> select json_patch( name , '{"b":555}' ) from a;
{"a":333,"b":555}

json_patch関数の注意点

MergePatchはJSONオブジェクトの要素を追加、変更、 または削除することができるため、JSONオブジェクトの場合、json_patch() ルーチンはjson_set()およびjson_remove()一般的な置き換えです。 ただし、MergePatchはJSON配列オブジェクトをアトミックとして扱います。 MergePatchは配列に追加することも、配列の個々の要素を変更することもできません。

Array全体を1つのユニットとして挿入、置換、または削除することができます。 したがって、json_patch()は、配列を含むJSON、 特に多数の部分構造を持つ配列を扱う場合にはあまり役に立ちません。