31

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
4

1 回答 1

57

因此,这是如何使用的第一个示例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(user.phone, '$.cell', 123) from \
        user;
{"cell":123,"home":"+498973"}

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

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

sqlite> update user 
   ...> set phone =(select json_set(user.phone, '$.cell', 721) from user)
   ...> where name == 'oz';
sqlite> select * from user;
oz|{"cell":721,"home":"+498973"}
于 2015-10-30T10:15:04.717 回答