【问题标题】:How to transform jsonb object to an array of objects?如何将 jsonb 对象转换为对象数组?
【发布时间】:2020-11-04 17:36:40
【问题描述】:

从这里:

 "data": {
           "media_object_uuid": ["5171167e-c109-4926-9606-5212ee250e2f"]
         }

到这里:

        "data": {
                  "media_object":[{"media_object_uuid": "5171167e-c109-4926-9606-5212ee250e2f"]
                }

换句话说,我想提取此数组的第一个值并将其设置在 media_object 内的新字段 media_object_uuid 上。我解决这个问题的方法是:

update demo_test set data = jsonb_set(data,'{media_object_uuid}',('{"media_object": { "media_object_uuid":' || (data->"media_object_uuid"[0])::text || '}}'));

但我返回 media_object_uuid 列不存在

【问题讨论】:

  • 你用这个做什么?

标签: sql json postgresql jsonb


【解决方案1】:

我认为您需要将 data->"media_object_uuid" 称为 data->'media_oject_uuid',因为在 Postgres 中,双引号用于引用列/实体名称(除非它们首先封装在单引号中):

edb=# create table abc (data jsonb);
CREATE TABLE
edb=# insert into abc values ('{
edb'#            "media_object_uuid": ["5171167e-c109-4926-9606-5212ee250e2f"]
edb'#          }');
INSERT 0 1
edb=# select ('{"media_object": [{ "media_object_uuid":' || (data->'media_object_uuid')::text || '}]}') from abc;
                                      ?column?                                       
-------------------------------------------------------------------------------------
 {"media_object": [{ "media_object_uuid":["5171167e-c109-4926-9606-5212ee250e2f"]}]}
(1 row)

edb=# update abc set data = jsonb_set(data,'{media_object_uuid}', ('{"media_object": [{ "media_object_uuid":' || (data->'media_object_uuid')::text || '}]}')::jsonb);
UPDATE 1
edb=# select * from abc;
                                                    data                                                    
------------------------------------------------------------------------------------------------------------
 {"media_object_uuid": {"media_object": [{"media_object_uuid": ["5171167e-c109-4926-9606-5212ee250e2f"]}]}}
(1 row)

【讨论】:

  • 确实,我在句尾缺少 data->'media_object_uuid' 和 '::jsonb' 的单引号。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 2018-02-13
  • 1970-01-01
  • 2020-06-15
  • 2016-03-11
  • 2021-06-20
相关资源
最近更新 更多