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
答案 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"}