首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从JSON对象数组中筛选和获取特定的键

如何从JSON对象数组中筛选和获取特定的键
EN

Database Administration用户
提问于 2021-07-20 22:34:31
回答 1查看 1.2K关注 0票数 -1

我有一个JSONB字段,其中包含这个结构中的一个值:

代码语言:javascript
复制
[
    {
        "type": "small",
        "name": "Josh",
        "greeting": "Hello buddy!",
        "hobby": "billiards",
        "place": "Barcelona"
    },
    {
        "type": "big",
        "name": "Aziz",
        "greeting": "Hey man!",
        "hobby": "tennis",
        "place": "Montpellier"
    }
]

如果type等于“大”,我想包括这个输出:

代码语言:javascript
复制
{
    "greeting": "Hey man! How're you doing Aziz?",
    "place": "Montpellier"
}
  1. 在第一行中,我将两个值合并为一个,并增加了一些单词。
  2. 如果没有等于“大”的type值,我不希望整个输出为空。相反,作为后盾,type值的输出值等于“小”。
  3. 如果没有type等于"small“的回退,则输出一个空字符串或NULL值,但不对整个查询结果作废。或者,如果不存在值,则最好不包括这些键。

我知道我可以使用CONCAT将值组合成一个值,但不知道如何构建和集成这个查询。我无法循环遍历array并输出与我的过滤器匹配的object值。尝试过CASE,但仍然无法得到我想要的结果。

我使用PostgreSQL 13。

EN

回答 1

Database Administration用户

发布于 2021-07-31 05:47:59

如果存在大小,则返回JSON的单个列,否则为NULL:

代码语言:javascript
复制
WITH records AS (
  SELECT * FROM JSONB_TO_RECORDSET(
    '[
        {
            "type": "small",
            "name": "Josh",
            "greeting": "Hello buddy!",
            "hobby": "billiards",
            "place": "Barcelona"
        },
        {
            "type": "big",
            "name": "Aziz",
            "greeting": "Hey man!",
            "hobby": "tennis",
            "place": "Montpellier"
        }
      ]'
  ) as record(type VARCHAR, name VARCHAR, greeting VARCHAR, hobby VARCHAR, place VARCHAR)
)
SELECT JSONB_BUILD_OBJECT(
        'greeting', FORMAT('%s How''re doing %s?', greeting, name),
        'place', place
       )
FROM records
WHERE type IN ('big', 'small')
ORDER BY type
LIMIT 1;
票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/295935

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档