在本指南中,我们将探索两种流行技术——JSON和SQLite之间的迷人交汇点。掌握如何在SQLite中使用JSON对于现代软件开发至关重要,尤其是处理那些不完全适合表格结构复杂数据结构时。无论你是经验丰富的开发者还是渴望扩展知识的新手,本教程都将助你开始学习如何在SQLite数据库中运用JSON。
让我们开始吧!
借助SQLite赋能现代应用数据管理
SQLite被誉为最广泛部署和使用的数据库引擎,是一款用户友好型数据库,无需复杂设置或服务器连接。SQLite简洁且适用于多种应用,使其成为软件开发中的首选。SQLite的二进制体积小巧,通常不足1 MB,比其他数据库更为轻量。此外,SQLite完全遵循ACID原则。
SQLite的另一独特之处在于它非常适合个人应用和互联网连接设备,如智能家居设备,这些都属于物联网(IoT)的范畴。此外,尽管SQLite设计简洁,但它对标准SQL语言的掌握却非常强大,能够处理诸如事务、子查询和触发器等操作。因此,SQLite使用简便,同时功能相当强大。
SQLite的能力远不止于简单的数据存储。它高效且用户友好,具备全文搜索和二进制大对象(blob)支持等特性。SQLite还提供了一个扩展机制,以增加额外功能,使其成为现代软件生态系统中一个灵活多变的工具。
趣闻一则:你知道吗?尽管许多人将SQLite发音为’S-Q-Lite’(sequel-light),但其创始人Richard Hipp实际上意图将其发音为’S-Q-L-ite’(ess-que-ell-ite),就像一种矿物名称,以此强调其既坚固又轻巧的特性。
为何SQLite在现代关系型数据库领域表现卓越
SQLite是轻量级且无服务器的数据库解决方案,适用于那些全面部署客户端-服务器数据库可能过于繁重的场景。由于SQLite具有自包含性,它不依赖任何外部依赖,因此非常可靠。SQLite数据库可跨不同文件系统和架构移植,使得数据迁移变得轻松。
SQLite的典型应用场景广泛,作为现今最广泛部署的数据库引擎,它被广泛应用于各种领域。例如,SQLite是应用程序本地持久化的标准选择,尤其是在移动应用中。此外,SQLite在数据分析和测试中也得到广泛应用,其清晰性和强大功能构成了一种制胜组合。最后,SQLite是网站数据存储的理想选择,能够有效管理用户数据、站点内容等。
SQLite的性能令人印象深刻,对于大多数常见操作,其速度往往超过其他知名数据库。
利用ClickHouse基准测试工具,我们对MySQL、PostgreSQL、SQLite和MongoDB等领先数据库在各种查询下的性能进行了对比。
SQLite强大的JSON处理能力使其成为现代数据管理的杰出选择
高效管理非结构化数据是许多开发者面临的挑战。这时,JSON的作用就显现出来了。作为一种灵活、无模式的数据显示格式,JSON非常适合处理那些不适合整齐地放入表格结构中的数据。
通过在SQLite中存储JSON数据,你可以利用SQLite强大的查询能力来高效提取和操作JSON数据。这种组合的美妙之处在于,SQLite内置了一系列简单易用的函数来管理JSON数据。此外,JSON作为数据交换格式的普及及其便携性意味着存储在SQLite中的JSON数据可以轻松地在不同系统之间共享、迁移或导出。
SQLite的JSON支持随着时间的推移已经成熟。它最初作为扩展在2015年发布的3.9.0版本中引入,但后续版本已内置了对JSON的支持。SQLite允许你使用TEXT列和一系列JSON函数(如json()
、json_extract()
、json_object()
和json_array()
)来保存和检索JSON数据。
深入理解SQLite用于JSON查询的强大函数
SQLite通过JSON函数管理和操作JSON数据。以下是SQLite中排名前十的JSON函数,作为参考,并将在接下来的部分通过简单的SQL查询示例展示每个函数的使用场景。
json()
:此函数验证一个字符串是否为有效的JSON。如果是,函数返回相同的JSON;如果不是,则返回NULL。json_extract()
:此函数使用路径从JSON字符串中提取对象。json_array()
:此函数创建一个JSON数组。json_array_length()
:此函数返回JSON数组的长度。json_insert()
:此函数将JSON值插入到JSON字符串中。json_object()
:此函数创建一个JSON对象。json_remove()
:此函数从JSON字符串中移除一个属性。json_replace()
:此函数替换JSON字符串中的值。json_type()
:此函数返回JSON值的类型(如INTEGER、REAL、NULL、TRUE、FALSE、TEXT和BLOB)。json_valid()
:此函数验证一个字符串是否为有效的JSON。
SQLite中JSON编码与解码函数的实用系列示例
在本节中,我们为上一节列出的每个JSON函数提供了简短的示例及解释。我们使用来自Dadroit JSON生成器的JSON数据示例。以下是原始JSON数据,为您提供背景信息。
SQLite中的json()
函数
此查询将JSON文本转换为JSON对象。
SELECT
json ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}' ) AS json_object;
查询结果将如下所示:
json_object |
---|
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970} |
SQLite中的json_extract()
函数
此查询通过路径从JSON对象中提取Name
值。
SELECT json_extract('{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Name') AS movie_name;
查询结果将如下所示:
movie_name |
---|
Forgotten in the Planet |
SQLite中的json_array()
函数
此查询根据提供的输入创建一个新的JSON数组。
SELECT
json_array ( 1, 2, 3 ) AS array_result;
结果将如下所示:
array_result |
---|
[1,2,3] |
SQLite中的json_type()
函数
此查询从JSON对象中检索Year
值的数据类型。
SELECT
json_type ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Year' ) AS property_type;
结果将如下所示:
property_type |
---|
integer |
SQLite中的json_array_length()
函数
此查询计算JSON对象中Cast
数组的元素数量。
SELECT
json_array_length ( '{"Genre":["Comedy","Crime"],"Cast":["Adrian Gratianna","Tani O''Hara","Tessie Delisle"]}', '$.Cast' ) AS array_length;
结果将如下所示:
array_length |
---|
3 |
SQLite中的json_object()
函数
此查询创建一个JSON对象,包含ID
和Name
键值对。
SELECT
json_object ( 'ID', 1, 'Name', 'Forgotten in the Planet' ) AS result;
结果将如下所示:
result |
---|
{“ID”:1,”Name”:”Forgotten in the Planet”} |
SQLite中的json_insert()
函数
此查询向JSON对象插入Director
键值属性。
SELECT
json_insert ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970}', '$.Director', 'Henrie Randell Githens' ) AS insert_movie;
结果将如下所示:
insert_movie |
---|
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970,”Director”:”Henrie Randell Githens”} |
SQLite中的json_remove()
函数
此查询从JSON对象中移除Director
键值对。
SELECT
json_remove ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}', '$.Director' ) AS result_of_remove;
结果将如下所示:
result_of_remove |
---|
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1970} |
SQLite中的json_replace()
函数
此查询将JSON对象中的Year
替换为新值1971
。
SELECT
json_replace ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}', '$.Year', 1971 ) AS result_of_replace;
结果将如下所示:
result_of_replace |
---|
{“ID”:1,”Name”:”Forgotten in the Planet”,”Year”:1971,”Director”:”Henrie Randell Githens”} |
SQLite中的json_valid()
函数
此查询检查提供的字符串是否具有构成有效JSON所需的正确语法和结构,如果是,则返回1
,否则返回0
。
SELECT
json_valid ( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Director":"Henrie Randell Githens"}' ) AS result_of_valid;
结果将如下所示:
result_of_valid |
---|
1 |
使用SQLite中JSON函数的增强SQL查询实用示例
既然您已了解SQLite中JSON的基础知识,接下来将展示一些使用之前提到的JSON函数和之前提到的JSON数据作为输入的SQLite数据库中JSON数据的实际工作流程示例。
使用插入查询在SQLite中存储JSON数据
首先,你需要将JSON数据插入到SQLite数据库中。我们创建一个名为movies
的表,其中包含一个名为data
的文本字段,因为SQLite中可以通过文本字段存储JSON数据。你将使用这个data
字段来存储和检索JSON值:
CREATE TABLE movies ( data TEXT );
接下来,将我们的JSON数据插入到表movies
的data
字段中:
INSERT INTO movies ( data )
VALUES
( '{"ID":1,"Name":"Forgotten in the Planet","Year":1970,"Genre":["Comedy","Crime"],"Director":"Henrie Randell Githens","Cast":["Adrian Gratianna","Tani OHara","Tessie Delisle"],"Runtime":90,"Rate":7.0}' );
要在SQLite中编辑(替换、插入、删除等)JSON,可以使用json_replace()
、json_insert()
和json_remove()
函数。
以下查询将ID为1
的电影的name
替换为新值:
UPDATE movies
SET data = json_replace ( data, '$.Name', 'Found in the Universe' )
WHERE
json_extract ( data, '$.ID' ) = 1;
以下查询在之前存储的JSON数据行中插入一个新的属性作为新字段:
UPDATE movies
SET data = json_insert ( data, '$.Country', 'USA' )
WHERE
json_extract ( data, '$.ID' ) = 1;
以下查询从之前存储的JSON数据行中移除Runtime属性:
UPDATE movies
SET data = json_remove ( data, '$.Runtime' )
WHERE
json_extract ( data, '$.ID' ) = 1;
从SQLite中提取JSON数据
要从SQLite检索JSON数据,可以使用json_extract()
或简写操作符->
:
选择电影的名称:
SELECT
json_extract ( data, '$.Name' )
FROM
movies
WHERE
json_extract ( data, '$.ID' ) = 1;
或使用->
简写操作符:
SELECT
data -> '$.Name'
FROM
movies
WHERE
data -> '$.ID' = 1;
检索电影的类型列表:
SELECT
json_extract ( data, '$.Genre' )
FROM
movies
WHERE
json_extract ( data, '$.ID' ) = 1;
从Cast
列表中检索第一位演员:
SELECT
json_extract ( data, '$.Cast[0]' )
FROM
movies
WHERE
json_extract ( data, '$.ID' ) = 1;
提取Year
和Rate
:
SELECT
json_extract ( data, '$.Year' ) AS Year,
json_extract ( data, '$.Rate' ) AS Rate
FROM
movies
WHERE
json_extract ( data, '$.ID' ) = 1;
总结见解
恭喜完成这段学习之旅!你已了解JSON数据类型与SQLite数据库如何协同工作。SQLite是一个实用的工具,它简洁而强大,易于上手。尽管体积小巧,却功能丰富。
简而言之,SQLite通过文本列和一些JSON函数,让我们能够存储和检索JSON数据。这些函数使我们能探索、分析及修改SQLite数据库中的JSON数据。SQLite提供了众多管理JSON数据的工具,从添加、修改到根据不同需求提取数据。我们探讨了SQLite中十个主要的JSON函数,它们简化了JSON数据的处理。接着,我们通过更多示例,展示了如何在SQLite中运用这些JSON函数进行SQL查询。
记住:精通SQLite中JSON的使用是一项需要深入实践的技能。所以,不要犹豫,大胆尝试、探索和学习。若本指南对你有所帮助,欢迎分享。祝你编程之旅愉快!
Source:
https://dzone.com/articles/learning-the-basics-how-to-use-json-in-sqlite