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

查询JSON[]字段数组类型中的数组元素

田成化
2023-03-14

我尝试使用函数JSON\u array\u elements()卸载JSON数组,并尝试使用JSON\u array\u length(field\u name)计算数组的元素,但没有成功。我使用的是PostgreSQL 9.4.5。

我想查询元素“name”的结果,这是json类型数组field crew | json[]上保存的数据。

crew": [
        {
            "workHours": "9",
            "workers": "50",
            "checker_rate": 100,
            "rate": 150,
            "name": "Ramona",
            "last": null,
            "boxRate": 2,
            "checkTraining": false,
            "editing": true,
            "ix": 0,
            "breakPay": 3.0833333333333335,
            "trainingPay": 0
        },
        {
            "workHours": "4",
            "workers": "50",
            "checker_rate": 120,
            "rate": 160,
            "name": "Ramon",
            "last": "Rosas",
            "boxRate": 2,
            "checkTraining": false,
            "editing": false,
            "id": 1,
            "breakPay": 1.5416666666666667,
            "trainingPay": 0
        }
    ]

共有1个答案

施靖
2023-03-14

您的问题源于对json[]类型的错误使用。json数组是单个json对象,其类型是json,而不是json[]。示例:

create table test (id int, crew json);
insert into test values
(1, '
[
    {
        "workHours": "9",
        "workers": "50",
        "checker_rate": 100,
        "rate": 150,
        "name": "Ramona",
        "last": null,
        "boxRate": 2,
        "checkTraining": false,
        "editing": true,
        "ix": 0,
        "breakPay": 3.0833333333333335,
        "trainingPay": 0
    },
    {
        "workHours": "4",
        "workers": "50",
        "checker_rate": 120,
        "rate": 160,
        "name": "Ramon",
        "last": "Rosas",
        "boxRate": 2,
        "checkTraining": false,
        "editing": false,
        "id": 1,
        "breakPay": 1.5416666666666667,
        "trainingPay": 0
    }
]');

函数json\u array\u elements()按预期工作:

select id, elem->'name' as name
from test, json_array_elements(crew) elem;

 id |   name   
----+----------
  1 | "Ramona"
  1 | "Ramon"
(2 rows)

其中一个查询(或两者)应能很好地与json[]配合使用:

select id, elem->'name' as name
from test, json_array_elements(crew[1]) elem;

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

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

  • 问题内容: 我正在尝试查询Postgres数据库中的某个值。我在表中有一个命名字段,可以用以下两种方式之一表示: 1。 2。 我对这两种表示形式都满意。但是,我似乎无法找出如何让意甲5中的所有用户都说出来。我按照以下方式尝试了多个查询: 还有许多其他尝试,比其他尝试更愚蠢(请参见上文)。我该怎么办? 我已经能够确定: 但是,以下查询有效: 我认为我没有正确地传递列中的数据。我提供的创建的哈希是:

  • 最近升级到使用PostgreSQL 9.3.1来利用JSON功能。在我的表中,我有一个json类型列,其结构如下: 就问题而言,这只是虚拟数据。 是否可以根据id查询电子邮件数组中的特定项目 差不多:“返回id=123的电子邮件)”?

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

  • 我有一个非常特别的问题,关于查询嵌套到数组字段的布尔字段和字符串字段。索引映射如下所示: 文档索引还有许多其他字段,这些字段没有嵌套到数组字段中,但必须包含在查询字段中。我尝试了一种使用过滤器和布尔查询的方法,如下所示: 这个查询的问题是,它返回的文档在我看来不必返回。在这种情况下,文件如下所示: 您可以注意到,array_field_1的第三项包含boolean_field_2:false和正在