【问题标题】:PostgreSql jsonb field to viewPostgreSql jsonb 字段查看
【发布时间】: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"
    }
  }
]

我该怎么做?

【问题讨论】:

    标签: postgresql jsonb


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-15
      • 1970-01-01
      • 2018-03-25
      • 2017-06-27
      • 2015-04-13
      • 2021-02-12
      • 1970-01-01
      • 2023-01-04
      相关资源
      最近更新 更多