首页 > 解决方案 > 在 Postgres 中修改 Jsonb 内部的字段

问题描述

我正在浏览 Postgres Jsonb 文档,但无法为我遇到的一个小问题找到解决方案。

我有一张桌子:MY_TABLE

具有以下列:

用户、姓名、数据和购买

需要注意的一点是“数据”是一个 jsonb 并且有多个字段。“数据”中的一个字段是“属性”,但它目前是一个字符串。我怎样才能将其更改为字符串列表?

我曾尝试使用 json_build_array 但没有任何运气

例如,我希望我的 jsonb 看起来像:

   {
       "Id": 1,
       "Attributes": ["Test"]

   }

代替

{
    "Id": 1,
    "Attributes": "Test"

}

我只关心 Json 内部的“属性”字段,而不关心任何其他字段。

标签: sqlarraysjsonpostgresqljsonb

解决方案


您可以使用jsonb_set()and来执行此操作jsonb_build_array(),如下所示:

jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes'))

DB Fiddle 上的演示

with t as (select '{ "Dd":1, "Attributes":"Test"}'::jsonb js)
select 
    js, 
    jsonb_set(js, '{Attributes}', jsonb_build_array(js->> 'Attributes')) new_js
from t
js | new_js                           
:-------------------------------- | :--------------------------------
{“Dd”:1,“属性”:“测试”} | {“Dd”:1,“属性”:[“测试”]}

推荐阅读