学习基础:如何在SQLite中使用JSON

在本指南中,我们将探索两种流行技术——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查询示例展示每个函数的使用场景。

  1. json():此函数验证一个字符串是否为有效的JSON。如果是,函数返回相同的JSON;如果不是,则返回NULL。
  2. json_extract():此函数使用路径从JSON字符串中提取对象。
  3. json_array():此函数创建一个JSON数组。
  4. json_array_length():此函数返回JSON数组的长度。
  5. json_insert():此函数将JSON值插入到JSON字符串中。
  6. json_object():此函数创建一个JSON对象。
  7. json_remove():此函数从JSON字符串中移除一个属性。
  8. json_replace():此函数替换JSON字符串中的值。
  9. json_type():此函数返回JSON值的类型(如INTEGER、REAL、NULL、TRUE、FALSE、TEXT和BLOB)。
  10. 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对象,包含IDName键值对。

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数据插入到表moviesdata字段中:

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;

提取YearRate

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