PostgreSql jsonb 字段查看

Posted

技术标签:

【中文标题】PostgreSql jsonb 字段查看【英文标题】:PostgreSql jsonb field to view 【发布时间】:2019-02-07 05:50:40 【问题描述】:

我在我的表“进程”中名为“FORM”的列之一中有这种 jsonb 数据,我想用一些位于行命名字段内的数据创建视图我只想要名称和值表单字段命名这个jsonb中的数组。

这里是 jsonb:

 
      "column": [
        
          "row": 
            "id": "ebc7afddad474aee8f82930b6dc328fe",
            "name": "Details",
            "field": [
              
                "name": 
                  "id": "50a5613e97e04cb5b8d32afa8a9975d1",
                  "label": "name"
                ,
                "value": 
                  "stringValue": "yhfghg"
                
              
            ]
          
        ,
        
          "row": 
            "id": "5b7471413cbc44c1a39895020bf2ec58",
            "name": "leave details",
            "field": [
              
                "name": 
                  "id": "bb127e8284c84692aa217539c4312394",
                  "label": "date"
                ,
                "value": 
                  "dateValue": 1549065600
                
              ,
              
                "name": 
                  "id": "33b2c5d1a968481d9d5e386db487de52",
                  "label": "days",
                  "options": 
                    "allowedValues": [
                      
                        "item": "1"
                      ,
                      
                        "item": "2"
                      ,
                      
                        "item": "3"
                      ,
                      
                        "item": "4"
                      ,
                      
                        "item": "5"
                      
                    ]
                  ,
                  "defaultValue": 
                    "radioButtonValue": "1"
                  
                ,
                "value": 
                  "radioButtonValue": "3"
                
              
            ]
          
        
      ]
    

而我希望这种jsonb in view 数据来自名为row 的对象内的名为field 的子数组......

[
  
    "name": 
      "id": "50a5613e97e04cb5b8d32afa8a9975d1"
    ,
    "value": 
      "stringValue": "yhfghg"
    
  ,
  
    "name": 
      "id": "bb127e8284c84692aa217539c4312394"
    ,
    "value": 
      "dateValue": 1549065600
    
  ,
  
    "name": 
      "id": "33b2c5d1a968481d9d5e386db487de52"
    ,
    "value": 
      "radioButtonValue": "3"
    
  
]

我该怎么做?

【问题讨论】:

【参考方案1】:

我使用jsonb_array_elements 两次扩展这两个数组,然后使用json_build_object 制作结果结构,然后jsonb_agg 将上面生成的几行组合成一个 JSONB 数组。

我包含一个行号是结果,因此我可以稍后应用group by,这样来自多个“进程”行的结果就不会被jsonb_agg意外组合。

with cols  as (select jsonb_array_elements( "FORM" ->'column') as r
                     ,row_number() over () as n from  "process" )
    ,cols2 as (select jsonb_array_elements(r->'row'->'field') as v
                     ,n from cols)
select jsonb_agg(json_build_object('name',v->'id','value',v->'value'))
from cols2 group by n;

【讨论】:

以上是关于PostgreSql jsonb 字段查看的主要内容,如果未能解决你的问题,请参考以下文章

PostgreSQL:如何对包括 JSONB 字段的属性求和,并保留表格形状?

如何获取 PostgreSQL jsonb 字段的大小?

对 PostgreSQL 中 jsonb 字段内的对象数组使用 LIKE 运算符

使用 Sequelize.js 和 PostgreSQL 在关联模型上查询 JSONB 字段

PostgreSQL中jsonb字段里逗号分隔的多选字段拆分匹配另一张表

Postgresql Jsonb字段内含数组属性的删除元素操作