📜  PostgreSQL JSON

📅  最后修改于: 2020-11-30 07:45:01             🧑  作者: Mango

PostgreSQL JSON

在本节中,我们将了解PostgreSQL的JSON数据类型,JSON数据类型实例,以及一些访问功能json_each(),json_object_keys(),json_typeof()等工作

我们还可以看到带有WHERE子句的JSON运算符示例,它有助于我们更灵活地处理JSON数据值,并且我们将使用一些聚合函数(SUM,MIN,AVG,MAX)来获取JSON数据。

什么是PostgreSQL JSON数据类型?

PostgreSQL中的另一种数据类型是JSON ,它表示JavaScript Object Notation 。这是一种开放标准格式,包含键值对。

使用JSON数据类型的主要目的是在服务器Web应用程序之间传输数据。 JSON是人类可读的文本,与其他格式不同。

由于PostgreSQL的9.2版本支持JSON数据类型,该类型包含几个用于操作JSON数据值的运算符和函数。

PostgreSQL JSON数据类型的语法

PostgreSQL JSON数据类型的语法如下:

variable_name JSON

PostgreSQL JSON数据类型示例

让我们看一个示例示例,以了解PostgreSQL JSON数据类型如何工作。

我们将在CREATE命令的帮助下创建一个新表,作为Purchase ,并使用INSERT命令插入一些值。

要将购买创建到组织数据库中,我们使用CREATE命令。

Purchase表包含两列,例如Purchase_idPuchase_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表中。

检索JSON数据

创建并插入Purchase表的值之后,我们将使用SELECT命令检索Purchase表的JSON数据:

SELECT Puchase_description 
FROM Purchase;

输出量

成功执行上述命令后,我们将获得以下结果,该结果显示PostgreSQL以Purchase表中存在的JSON形式返回输出:

PostgreSQL运算符获取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'语句将以文本形式检索所有产品。

使用聚合函数获取JSON数据

在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运算符

要过滤检索的行,我们将在WHERE子句中使用JSON运算符

在以下示例中,我们将通过以下命令确定谁购买了比利时巧克力冰淇淋:

SELECT Purchase_description ->> 'purchaser' AS Purchaser
FROM Purchase
WHERE Purchase_description-> 'items' ->> 'product' = 'Belgium chocolate ice cream';

输出量

执行上述命令后,我们将获得以下结果,该命令显示Thomas JonesPurchase表中购买了比利时巧克力冰淇淋

在以下示例中,我们将使用以下命令确定谁一次购买了三种产品:

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函数

我们在PostgreSQL中提供了以下JSON函数,例如json_each(),json_object_keys(),json_typeof()等,这些函数可帮助我们在使用JSON数据类型时提高性能。

让我们一一看待它们,以了解PostgreSQL JSON函数如何工作。

为此,我们使用CREATE命令将上面在本教程前面创建的Purchase表带入Organization数据库。

json_object_keys函数

我们可以使用json_object_keys()函数检索最外层JSON对象中的一组键。

例如:在下面的命令中,我们使用json_object_keys()函数Purchase表中获取Purchase_description列中嵌套项目对象的所有

SELECT json_object_keys (Purchase_description->'items')
FROM Purchase;

输出量

执行完上述命令后,我们将获得以下输出,该输出借助json_object_keys()函数显示嵌套项目对象的所有

json_each函数

如果我们想将最外层的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_typeof函数

要检索最外层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数据类型部分中,我们学习了以下主题:

  • PostgreSQL JSON数据类型用于存储指定列的JSON值。
  • 我们已经在WHERE子句中使用SON运算符来过滤指定表中的检索行。
  • 我们还使用诸如平均值,总和,最小值,最大值之类的聚合函数来获取JSON数据。
  • 我们使用了不同的J SON函数,例如json_each(),json_object_keys(),json_typeof()等,以增强和处理特定表中的JSON值。
  • 我们使用JSON运算符为表的特定列更成功地获取JSON数据。