【问题标题】:Create view having nested json text from a table - Postgres从表中创建具有嵌套 json 文本的视图 - Postgres
【发布时间】:2020-07-10 16:07:54
【问题描述】:

说,我有以下 postgres 表,

> select * from t;
+----+---------+-----------+---------+---------+
| id | a       | b         | c       | d       |
+----+---------+-----------+---------+---------+
| 1  | value_a | value_b   | value_c | value_d |
+----+---------+-----------+---------+---------+
...
+----+---------+-----------+---------+---------+
|... | ...     | ...       | ...     | ...     |
+----+---------+-----------+---------+---------+

现在我想从这个表中创建一个视图,它能够存储具有嵌套 json 文本的以下格式的数据。

这应该按id 列分组。

{
  "id": 1,
  "a": "A",
  "x":"{\"k1\":\"value_b\",\"k2\":\"{\"k21\":\"value_c\",\"k22\":\"value_d\"}\"}"
}

我不知道如何才能做到这一点。任何人都可以为此写一个 postgres sql 查询。

【问题讨论】:

  • 您是否希望源表中的每一行在视图中有一行,或者涉及到一些聚合(在这种情况下,您需要显示多行数据)?
  • @GMB 您现在可以在视图中为源表中的每一行假设一行。
  • @GMB 如果我的嵌套 json 字段是来自另一个表的数组,我必须通过查询来获取?我已经更新了问题,请提供建议/答案。并保留您的原始答案。这也是我的问题的一部分。
  • 在发布答案后大量更新问题不是一个好习惯。我建议接受答案(如果您认为它正确回答了您的原始问题)并提出一个新问题,提供适当的新样本数据和预期结果。
  • @GMB 是的,这是有道理的。顺便说一句,非常感谢。

标签: sql json database postgresql sql-view


【解决方案1】:

可以使用json(b)_build_*函数生成json(b):

create view myview as
select 
    id,
    a,
    jsonb_build_object(
        'k1', b,
        'k2', jsonb_build_object(
            'k21', c,
            'k22', d
        )
    ) as x
from mytable

如果您希望将整行作为单个 json 对象:

create view myview as
select jsonb_build_object(
    'id', id
    'a', a,
     'x', jsonb_build_object(
        'k1', b,
        'k2', jsonb_build_object(
            'k21', c,
            'k22', d
        )
    )
) val
from mytable

【讨论】:

    猜你喜欢
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 2021-10-02
    • 2020-08-06
    • 2021-11-02
    • 2014-11-24
    • 1970-01-01
    相关资源
    最近更新 更多