当前位置: 首页 > 知识库问答 >
问题:

查询JSON列中数组的元素

慕容安易
2023-03-14

最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下:

{
   "id": "123",
   "name": "foo",
   "emails":[
      {
        "id": "123",
        "address": "somethinghere"
      },
      {
        "id": "456",
        "address": "soemthing"
      }
   ]
} 

就问题而言,这只是虚拟数据。

是否可以根据id查询电子邮件数组中的特定项目
差不多:“返回id=123的电子邮件)”?

共有3个答案

李兴安
2023-03-14

看到这篇文章,发现您可以像这样直接查询表:

SELECT *
FROM   table_name, json_array_elements(json_column) AS data
WHERE  data->>'id' = 123;

省略此部分:

json_array_elements(t.json_col->'emails')
充鑫鹏
2023-03-14

使用Postgres 9.4中的JSONB列,您可以使用包含运算符@

SELECT * FROM jsontest WHERE data @> '{ "emails": [{ "id": "123" }] }';

有关更多详细信息,请参阅查询JSON类型内的数组元素。

以下是一个工作示例:

CREATE TABLE jsontest(data JSONB NOT NULL);
INSERT INTO jsontest VALUES (
  '{
     "name": "foo",
     "id": "123",
     "emails": 
     [
       {
         "address": "somethinghere",
         "id": "123"
       },
       {
         "address": "soemthing",
         "id": "456"
       }
     ]
  }'
);
SELECT * FROM jsontest WHERE data @> '{ "emails": [{ "id": "123" }] }';

data
----
{"id": "123", "name": "foo", "emails": [{"id": "123", "address": "somethinghere"}, {"id": "456", "address": "soemthing"}]}

(1排)

曹和正
2023-03-14

关于Postgres 9.4,请参见adamc稍后的回答。或:

  • 查询JSON类型内的数组元素

是的,这是可能的:

SELECT *
FROM   tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE  elem->>'id' = 123;

tbl是您的表名,json\u col是json列的名称。

另请参见:

  • 如何使用新PostgreSQL JSON数据类型中的字段进行查询

关于隐式横向交叉连接:

  • 带有元素号的PostgreSQL unnest()

支持此类查询的索引:

  • 在JSON数组中查找元素的索引
 类似资料:
  • 问题内容: 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是伪数据。 是否可以根据id在emails数组中查询特定项目? 差不多:“返回电子邮件,其中id = 123)”? 问题答案: 是的,这是可能的: 是您的表名,是JSON列的名称。

  • 我尝试使用函数JSON\u array\u elements()卸载JSON数组,并尝试使用JSON\u array\u length(field\u name)计算数组的元素,但没有成功。我使用的是PostgreSQL 9.4.5。 我想查询元素“name”的结果,这是json类型数组field crew | json[]上保存的数据。

  • 问题内容: 我正在尝试测试PostgreSQL 9.3中的类型。 我在名为的表中有一个列。JSON看起来像这样: 我想查询表中所有与“对象”数组中“ src”值匹配的报告。例如,是否可以在数据库中查询所有匹配的报告?我成功地写了一个查询,可以匹配: 但是由于具有一组值,所以我似乎无法编写出有效的东西。是否可以在数据库中查询所有匹配的报告?我已经查看了这些来源,但仍然无法了解: http://www

  • 我试图测试PostgreSQL 9.3中的类型。 我在一个名为的表中有一个名为的列。JSON如下所示: 我想查询表中与'objects'数组中的'src'值匹配的所有报告。例如,是否可以查询数据库中匹配的所有报告?我成功地编写了一个可以匹配的查询: null 我不是SQL专家,所以我不知道我做错了什么。

  • 我有一个如下所示的数据库表: 我想使用PostgreSQL的JSON查询功能来选择JSON\u数组中的某些子字典,例如字典中的a:1。 输出应为 以下查询适用于每个数组中的第一个元素,但我想检查所有元素:

  • 我有Oracle表: 数据 Oracle是否支持产生以下输出的查询?--删除重复并将其分组到单个JSON数组中 版本: Oracle数据库12c企业版发布12.2.0.1.0-64位生产