📅  最后修改于: 2020-11-30 07:45:01             🧑  作者: Mango
在本节中,我们将了解PostgreSQL的JSON数据类型,JSON数据类型的实例,以及一些访问功能json_each(),json_object_keys(),json_typeof()等工作
我们还可以看到带有WHERE子句的JSON运算符示例,它有助于我们更灵活地处理JSON数据值,并且我们将使用一些聚合函数(SUM,MIN,AVG,MAX)来获取JSON数据。
PostgreSQL中的另一种数据类型是JSON ,它表示JavaScript Object Notation 。这是一种开放标准格式,包含键值对。
使用JSON数据类型的主要目的是在服务器和Web应用程序之间传输数据。 JSON是人类可读的文本,与其他格式不同。
由于PostgreSQL的9.2版本支持JSON数据类型,该类型包含几个用于操作JSON数据值的运算符和函数。
PostgreSQL JSON数据类型的语法如下:
variable_name JSON
让我们看一个示例示例,以了解PostgreSQL JSON数据类型如何工作。
我们将在CREATE命令的帮助下创建一个新表,作为Purchase ,并使用INSERT命令插入一些值。
要将购买创建到组织数据库中,我们使用CREATE命令。
Purchase表包含两列,例如Purchase_id和Puchase_description。
在这里, Purchase_id列是主键列,它对购买进行了分类,对于Puchase_description列,我们使用JSON数据类型,该数据类型以JSON的形式存储数据。
CREATE TABLE Purchase (
Purchase_id serial NOT NULL PRIMARY KEY,
Purchase_description json NOT NULL
);
输出量
执行上述命令后,我们将获得以下消息,该消息显示Purchase表已成功创建到Organization数据库中。
成功创建Purchase表后,我们将在INSERT命令的帮助下将值插入JSON列。并且我们还确保数据采用有效的JSON格式。
下面的INSERT命令用于在“购买”表中插入新行。
INSERT INTO Purchase (Purchase_description)
VALUES('{ "purchaser": "Olivia Smith", "items": {"product": "iphone11 pro max","qty": 1}}');
输出量
实施上述命令后,我们将获得以下消息窗口,该窗口显示值已成功插入“购买”表中。
上面的命令意味着Olivia Smith购买了一部iPhone 11 pro max 。
现在,我们将在以下命令的帮助下将各种行插入到Purchase表中:
INSERT INTO Purchase (Purchase_description)
VALUES('{ "purchaser": "Maria Rodriguez", "items": {"product": "Hair shampoo","qty": 2}}'),
('{ "purchaser": "Thomas Jones", "items": {"product": "Belgium chocolate ice cream","qty": 7}}'),
('{ "purchaser": "Margaret Davis", "items": {"product": "Barbie doll","qty": 3}}'),
('{ "purchaser": "Elizabeth Brown", "items": {"product": "puzzle set","qty": 10}}');
输出量
实施上述命令后,我们将获得以下消息窗口,该窗口显示多个值已成功插入到Purchase表中。
创建并插入Purchase表的值之后,我们将使用SELECT命令检索Purchase表的JSON数据:
SELECT Puchase_description
FROM Purchase;
输出量
成功执行上述命令后,我们将获得以下结果,该结果显示PostgreSQL以Purchase表中存在的JSON形式返回输出:
为了获取JSON数据,PostgreSQL允许我们使用两个本机运算符,如下所示
在这里, ->运算符用于按键检索JSON对象字段,而->>运算符用于按text检索JSON对象字段。
要以JSON形式获取所有购买者,我们将在以下命令中使用->运算符:
SELECT Purchase_description -> 'purchaser' AS pruchaser
FROM Purchase;
输出量
实施上述命令后,我们将获得以下结果,该结果将在-> Operator的帮助下以JSON形式显示所有购买者,如下所示:
要以文本形式检索所有购买者,我们将使用->>运算符,如下面的命令所示:
SELECT Purchase_description ->> 'purchaser' AS pruchaser
FROM Purchase;
输出量
成功执行上述命令后,我们将在输出中使用->>运算符获取所有文本形式的购买者,如下所示:
如上所述, ->运算符检索一个JSON对象,将其与->>运算符组合以返回特定节点。
让我们看一个示例示例,以便我们更好地理解:
要出售所有产品,我们将使用以下命令:
SELECT Purchase_description -> 'items' ->> 'product' as Product
FROM Purchase
ORDER BY Product;
输出量
实现上述命令后,我们将获得以下输出,其中第一个Purchase_description->'items'将根据JSON对象检索项目。
第二个Purchase_description->'items'->>'product'语句将以文本形式检索所有产品。
在PostgreSQL中,我们具有以下汇总函数,例如MAX,MIN,AVERAGE,SUM等。我们将要检索JSON数据。
让我们看下面的示例示例:
在下面的命令中,我们将尝试在“购买”表中获取最大,最小,平均和购买的产品总数。
SELECT
MAX (CAST (Purchase_description-> 'items' ->> 'qty' AS INTEGER)),
MIN (CAST (Purchase_description -> 'items' ->> 'qty' AS INTEGER)),
AVG (CAST (Purchase_description -> 'items' ->> 'qty' AS INTEGER)),
SUM (CAST (Purchase_description -> 'items' ->> 'qty' AS INTEGER))
FROM Purchase;
输出量
成功执行上述命令后,我们将获得以下输出,该输出在“购买”表中显示所有购买产品的最大,最小,平均和总数量:
要过滤检索的行,我们将在WHERE子句中使用JSON运算符。
在以下示例中,我们将通过以下命令确定谁购买了比利时巧克力冰淇淋:
SELECT Purchase_description ->> 'purchaser' AS Purchaser
FROM Purchase
WHERE Purchase_description-> 'items' ->> 'product' = 'Belgium chocolate ice cream';
输出量
执行上述命令后,我们将获得以下结果,该命令显示Thomas Jones从Purchase表中购买了比利时巧克力冰淇淋。
在以下示例中,我们将使用以下命令确定谁一次购买了三种产品:
SELECT Purchase_description ->> 'purchaser' AS Purchaser,
Purchase_description -> 'items' ->> 'product' AS product
FROM Purchase
WHERE CAST ( Purchase_description-> 'items' ->> 'qty' AS INTEGER) = 3
输出量
实施上述命令后,我们将获得以下结果,该结果显示Margaret Davis从Purchase表中购买了三种产品。
注意:在上面的命令中,我们使用了typecast将qty字段修改为INTEGER类型,并将其与两个关联。
我们在PostgreSQL中提供了以下JSON函数,例如json_each(),json_object_keys(),json_typeof()等,这些函数可帮助我们在使用JSON数据类型时提高性能。
让我们一一看待它们,以了解PostgreSQL JSON函数如何工作。
为此,我们使用CREATE命令将上面在本教程前面创建的Purchase表带入Organization数据库。
我们可以使用json_object_keys()函数检索最外层JSON对象中的一组键。
例如:在下面的命令中,我们使用json_object_keys()函数从Purchase表中获取Purchase_description列中嵌套项目对象的所有键。
SELECT json_object_keys (Purchase_description->'items')
FROM Purchase;
输出量
执行完上述命令后,我们将获得以下输出,该输出借助json_object_keys()函数显示嵌套项目对象的所有键。
如果我们想将最外层的JSON对象增加为一组键值对,则可以使用json_each()函数。
让我们看一个示例示例来详细了解:
在下面的示例中,我们将尝试从Purchase表的Purchase_description列中将最外面的JSON对象检索到一组键值对中,如以下命令所示:
SELECT json_each (Purchase_description)
FROM Purchase;
输出量
成功执行上述命令后,我们将获得以下输出,该输出将所有最外面的JSON对象显示在Purchase表的Purchase_description列中的一组键值对中。
如果我们需要检索一组键-值对作为文本,我们还可以使用json_each_text()函数代替json_each()函数。
例如
在以下命令中,我们将使用json_each_text()函数代替json_each()函数:
SELECT json_each_text(Purchase_description)
FROM Purchase;
输出量
与上面的json_each()函数相比,在实现上述命令时,我们将获得类似的输出。
要检索最外层JSON值的类型作为字符串,我们可以使用json_typeof()函数。并且json_typeof()可以接受布尔值,数字,对象,null,字符串和数组数据值。
例如:在以下命令中,我们将尝试获取“购买”表中存在的商品的数据类型:
SELECT json_typeof(Purchase_description->'items')
FROM Purchase;
输出量
执行上述命令后,我们将获得以下结果,该结果将最外面的json值显示为字符串:
以下命令用于检索嵌套项目JSON对象的qty字段数据类型。
SELECT json_typeof(Purchase_description->'items'->'qty')
FROM Purchase;
输出量
执行完上述命令后,我们将获得以下输出,该输出显示嵌套项目JSON对象的qty字段数据类型。
在PostgreSQL JSON数据类型部分中,我们学习了以下主题: