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

json_set関数

JSONデータの一部を追加または置き換える関数

JSONデータの一部を追加または置き換える方法

JSONデータの一部を追加または置き換えるにはjson_set関数を使用します。

json_set関数の書き方

json_set('{"a":2,"c":4}', '$.a', 99) → '{"a":99,"c":4}'
json_set('{"a":2,"c":4}', '$.e', 99) → '{"a":2,"c":4,"e":99}'
json_set('{"a":2,"c":4}', '$.c', '[97,96]') → '{"a":2,"c":"[97,96]"}'
json_set('{"a":2,"c":4}', '$.c', json('[97,96]')) → '{"a":2,"c":[97,96]}'
json_set('{"a":2,"c":4}', '$.c', json_array(97,96)) → '{"a":2,"c":[97,96]}'

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

json_set関数の使い方

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 t1 ( items json )");
$pdo->exec("insert into t1 values ( '{\"key1\":\"value1\",\"key2\":\"value2\"}')");
$pdo->exec("update t1 set items = JSON_SET(items,'$.key2','replace')");
$stmt = $pdo->query("select * from t1");
$result = $stmt->fetchAll();

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

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

SQL
C:sq>sqlite3 test.sqlite3
sqlite> create table t1 ( items json );
sqlite> insert into t1 values ( '{"key1":"value1","key2":"value2"}');
sqlite> select * from t1;
{"key1":"value1","key2":"value2"}
sqlite> update t1 set items = JSON_SET(items,'$.key2','replace');
sqlite> select * from t1;
{"key1":"value1","key2":"replace"}

json_set関数の補足事項

Functionあった場合上書きするかどうか無い場合に追加するかどうか
json_insert()NOYES
json_replace()YESNO
json_set()YESYES