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

在Postgres 9.6中的json列中查询属性数组内的数据

阎自怡
2023-03-14

我有一个表说类型,它有一个JSON列,说位置看起来像这样:

{ "attribute":[
  {
    "type": "state",
    "value": "CA"
  },
  {
    "type": "distance",
    "value": "200.00"
  } ...
  ]
  } 

表中的每一行都有数据,并且都有“type”:“state”。我只想从表中的每一行提取“type”:“state”的值,并将其放入一个新列中。我问了几个问题,比如:

  • 查询JSON列中的数组元素
  • 用于在JSON数组中查找元素的索引
  • 查询JSON类型内的数组元素

但无法让它工作。我不需要查询这个。我需要这个专栏的价值。如果我错过了什么,我事先道歉。

共有2个答案

方祺
2023-03-14

我主要使用Redshift,其中有一个内置函数来做到这一点。所以如果你在那里,请检查一下。redshift文档

Postgres似乎有一个类似的功能集:https://www.postgresql.org/docs/current/static/functions-json.html

我认为您需要将三个功能链接在一起才能实现这一点。

SELECT 
   your_field::json->'attribute'->0->'value'
FROM
    your_table

我尝试的是按键名提取json,然后是按索引提取json数组(如果您的示例与完整数据一致,则总是第一个),最后是按键名提取另一个json数组。

编辑:让它为您的示例工作

SELECT 
  '{ "attribute":[
  {
    "type": "state",
    "value": "CA"
  },
  {
    "type": "distance",
    "value": "200.00"
  }
  ]
  }'::json->'attribute'->0->'value'

返回“CA”

第二次编辑:嵌套查询@McNets是正确、更好的答案。但在这次潜水中,我发现你可以在Postgres中嵌套查询!多酷啊!

我将json作为文本字段存储在虚拟表中并成功运行了这个:

SELECT 
  (SELECT value FROM json_to_recordset(
    my_column::json->'attribute') as x(type text, value text)
  WHERE
    type = 'state'
    )
FROM dummy_table
居京
2023-03-14
create table t(data json);
insert into t values('{"attribute":[{"type": "state","value": "CA"},{"type": "distance","value": "200.00"}]}'::json); 

select elem->>'value' as state
from t, json_array_elements(t.data->'attribute') elem
where elem->>'type' = 'state';

| state |
| :---- |
| CA    |

dbfiddle在这里

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

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

  • 您将如何在存储在列中的数组中搜索元素?(更新:另请参阅列的9.4更新答案。) 如果我有这样一个JSON文档,存储在名为blob的列中: 我想做的是: 并取出所有匹配的行。但这不起作用,因为

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

  • 问题内容: 我在postgres json列中有一些类似于下面的json的json。我正在尝试查询它以识别一些输入错误的数据。我基本上是在寻找房屋描述与房屋号码相同的地址。我不太想办法。 我写了这个sql,它将找到数据匹配的地方: 显然,这仅适用于第一所学校的第一地址。有没有办法查询每所学校的所有地址? 问题答案: 在横向联接中使用的次数与要比较的json数组的深度一样多:

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