JSON extract \ set的SQLite JSON1示例

时间:2015-10-30 09:16:50

标签: json sqlite sqlite-json1

SQLite现在有一个实验性的JSON1扩展来处理JSON字段。可供选择的功能看起来很有前途,但我不知道如何在查询的上下文中使用它们。

假设我创建了下表:

sqlite> create table user(name,phone);
sqlite> insert into user values('oz', json_array(['+491765','+498973']));

该文档显示了如何在查询中使用json_each,但所有其他函数在上下文文档中都缺少一些。

具有SQLite经验的人可以提供一些如何使用的示例:

  • json_extract
  • json_set

1 个答案:

答案 0 :(得分:27)

所以,这是如何使用json_extract的第一个例子。首先,数据以不同的方式插入:

insert into user (name, phone) values("oz", json('{"cell":"+491765", "home":"+498973"}'));

现在,我们可以像在普通的sql中一样选择所有用户的电话号码:

sqlite> select user.phone from user where user.name=='oz';
{"cell":"+491765","home":"+498973"}
sqlite> 

但是,如果我们不关心地面线路而我们只想要手机呢? 输入json_extract

sqlite> select json_extract(user.phone, '$.cell') from user;
+491765

这是如何使用json_extract

使用json_set是类似的。鉴于我们想要更新手机:

sqlite> select json_set(json(user.phone), '$.cell', 123) from \
        user;
{"cell":123,"home":"+498973"}

您可以在其他SQL查询中组合这些函数调用。因此,你可以 将SQLite与结构化数据一起使用,并以非结构化数据的形式使用 JSON。

以下是仅更新用户手机的方法:

sqlite> update user 
   ...> set phone =(select json_set(json(user.phone), '$.cell', 721) from user)
   ...> where name == 'oz';
sqlite> select * from user;
oz|{"cell":721,"home":"+498973"}